incus-contrib/notes/mermaid-test.md

5.3 KiB

Mermaid Diagram Rendering Test

Test file to verify Gitea renders mermaid diagrams correctly. Delete this file after confirming.


Test 1: HAProxy Architecture (flowchart, top-down)

Original: notes/haproxy-guide.md lines 13-44

flowchart TD
    client["Client / LAN Traffic"]
    vip["UPLINK VIP Address\n192.168.103.200"]
    ovnlb["OVN Load Balancer\n(distributes to HA pair\nfor failover)"]
    ha1["HAProxy 01\n10.10.10.50\n(container)"]
    ha2["HAProxy 02\n10.10.10.51\n(container)"]
    ng1["nginx-01\n.60 :80"]
    ng2["nginx-02\n.61 :80"]
    ng3["nginx-03\n.62 :80"]

    client --> vip --> ovnlb
    ovnlb --> ha1
    ovnlb --> ha2
    ha1 --> ng1
    ha1 --> ng2
    ha1 --> ng3
    ha2 --> ng1
    ha2 --> ng2
    ha2 --> ng3

    style vip fill:#4a90d9,color:#fff
    style ovnlb fill:#7b68ee,color:#fff
    style ha1 fill:#2ecc71,color:#fff
    style ha2 fill:#2ecc71,color:#fff
    style ng1 fill:#e67e22,color:#fff
    style ng2 fill:#e67e22,color:#fff
    style ng3 fill:#e67e22,color:#fff

Test 2: Bridge Topology (subgraphs for nodes)

Original: notes/networking-guide.md lines 81-100

flowchart TD
    subgraph node1["Node 1 (net-node-01)"]
        br1["incusbr0\n10.0.0.1/24"]
        c1["c1\n.202"]
        c2["c2\n.40"]
        nat1["NAT → ens18\n192.168.1.209"]
        c1 --- br1
        c2 --- br1
        br1 --> nat1
    end

    subgraph node2["Node 2 (net-node-02)"]
        br2["incusbr0\n10.0.0.1/24"]
        c3["c3\n.52"]
        nat2["NAT → ens18\n192.168.1.150"]
        c3 --- br2
        br2 --> nat2
    end

    nat1 --- lan
    nat2 --- lan
    lan(("LAN\n192.168.1.0/24"))

    node1 ~~~ node2

    linkStyle 5 stroke:red,stroke-dasharray:5
    linkStyle 6 stroke:red,stroke-dasharray:5

Key point: Each node has its own bridge with the same subnet. The bridges are NOT connected to each other.


Test 3: OVN Topology (control plane + nodes + tunnels)

Original: notes/networking-guide.md lines 196-227

flowchart TD
    subgraph cp["OVN Control Plane"]
        ovnc["ovn-central\novn-northd + ovsdb-server\nNB: tcp:192.168.1.209:6641\nSB: tcp:192.168.1.209:6642"]
    end

    subgraph n1["Node 1 (net-node-01)"]
        ctrl1["ovn-controller\novs-vswitchd"]
        oc1["c1 (.2)"]
        oc2["c2 (.3)"]
        ls1["OVN logical switch\n10.10.10.0/24"]
        oc1 --- ls1
        oc2 --- ls1
        ctrl1 ~~~ ls1
    end

    subgraph n2["Node 2 (net-node-02)"]
        ctrl2["ovn-controller\novs-vswitchd"]
        oc3["c3 (.4)"]
        ls2["OVN logical switch\n10.10.10.0/24"]
        oc3 --- ls2
        ctrl2 ~~~ ls2
    end

    subgraph n3["Node 3 (net-node-03)"]
        ctrl3["ovn-controller\novs-vswitchd"]
        oc4["c4 (.5)"]
        ls3["OVN logical switch\n10.10.10.0/24"]
        oc4 --- ls3
        ctrl3 ~~~ ls3
    end

    ovnc -->|proxy devices| ctrl1
    ovnc -->|proxy devices| ctrl2
    ovnc -->|proxy devices| ctrl3

    ls1 <-->|Geneve tunnel\n192.168.1.209| ls2
    ls2 <-->|Geneve tunnel\n192.168.1.150| ls3
    ls1 <-->|Geneve tunnel\n192.168.1.13| ls3

    lan(("LAN\n192.168.1.0/24"))
    n1 --- lan
    n2 --- lan
    n3 --- lan

Test 4: Geneve Tunnel Mesh

Original: notes/ovn-deep-dive.md lines 331-349

graph LR
    n1(("oc-node-01\n.140"))
    n2(("oc-node-02\n.141"))
    n3(("oc-node-03\n.142"))

    n1 <-->|"Geneve\nUDP 6081\nBFD ✓"| n2
    n2 <-->|"Geneve\nUDP 6081\nBFD ✓"| n3
    n1 <-->|"Geneve\nUDP 6081\nBFD ✓"| n3

    style n1 fill:#3498db,color:#fff
    style n2 fill:#2ecc71,color:#fff
    style n3 fill:#e74c3c,color:#fff

Test 5: OVS Bridge Architecture (per-node)

Original: notes/ovn-deep-dive.md lines 305-313

flowchart LR
    subgraph provider["incusovn7 (provider bridge)"]
        nic["incusovn7 ← physical NIC"]
        intport["incusovn7b ← internal port"]
        patch1["patch-...-to-br-int"]
    end

    subgraph integration["br-int (integration bridge)"]
        veth["veth* ← instance NICs"]
        ovntun["ovn-* ← Geneve tunnels"]
        patch2["patch-br-int-to-..."]
        brint["br-int ← internal port"]
    end

    patch1 <-->|"patch port"| patch2

    style provider fill:#e8f4fd,stroke:#3498db
    style integration fill:#eafaf1,stroke:#2ecc71

Test 6: Operations Center Architecture

Original: notes/operations-center-guide.md lines 12-45

flowchart TD
    subgraph proxmox["Proxmox VE Host (pve)\nIntel i9-13900HK · 64 GiB · 20 cores"]
        subgraph cluster["Incus Cluster (OVN Geneve · net-prod 10.10.10.0/24)"]
            n1["oc-node-01\nVMID 400\n4c/8G/64G\n.140\novn-central"]
            n2["oc-node-02\nVMID 401\n4c/8G/50G\n.141"]
            n3["oc-node-03\nVMID 402\n4c/8G/50G\n.142"]
        end
        oc["oc-server\nVMID 920 · 2c/4G/50G\n.120\nhttps://192.168.102.120\nWeb UI + CLI + REST API"]
    end

    vmbr0["vmbr0 (VLAN 69)\n192.168.100.0/22\nGateway: 192.168.100.1"]
    ext["OVN External IPs\n192.168.103.200-210\nLB: .201 · Fwd: .202"]

    proxmox --- vmbr0
    cluster -.->|"OVN external"| ext

    style proxmox fill:#f5f5f5,stroke:#333
    style cluster fill:#e8f4fd,stroke:#3498db
    style oc fill:#fff3cd,stroke:#e67e22
    style n1 fill:#d4edda,stroke:#28a745
    style n2 fill:#d4edda,stroke:#28a745
    style n3 fill:#d4edda,stroke:#28a745