Skip to content
Snippets Groups Projects

PXM-cluster-WIP

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by Wolf Noble
    Edited
    PXM-cluster-diagram.py 6.91 KiB
    from diagrams import Diagram, Cluster, Edge, Node
    #generic
    from diagrams.generic.compute import Rack
    from diagrams.generic.database import SQL
    from diagrams.generic.device import Mobile, Tablet
    from diagrams.generic.network import Firewall, Router, Switch,Subnet
    from diagrams.generic.os import Centos, IOS, LinuxGeneral, Ubuntu, Windows
    from diagrams.generic.place import Datacenter
    from diagrams.generic.storage import Storage
    #oci 
    from diagrams.oci.connectivity import DNS
    from diagrams.oci.compute import VM
    #onprem
    from diagrams.onprem.ci import Gitlabci
    from diagrams.onprem.client import Client, User, Users
    from diagrams.onprem.container import Docker, LXC
    from diagrams.onprem.compute import Server
    from diagrams.onprem.database import Mysql
    from diagrams.onprem.iac import Ansible
    from diagrams.onprem.network import Internet, Nginx, Apache, Opnsense
    from diagrams.onprem.proxmox import Pve
    from diagrams.onprem.vcs import Gitlab
    from diagrams.elastic.elasticsearch import Beats, Elasticsearch, Kibana, Logstash
    from diagrams.programming.language import Bash, C, Go, JavaScript, NodeJS, PHP, Python
    from diagrams.aws.compute import EC2
    from diagrams.aws.database import RDS
    from diagrams.aws.network import ELB
    # https://www.graphviz.org/doc/info/attrs.html
    graph_attr = { "fontsize": "20","bgcolor": "transparent", "sides": "6"}
    hideme_child = {"width": "0.4","height": "0.4","labelloc": "b","fontsize": "5" }
    noshow = {"width": "1","height": "1","labelloc": "b","fontsize": "5" }
    hideme = {"width": "0.1","height": "0.1","labelloc": "b","fontsize": "10",  }
    rounded_a = {"style":"rounded"}
    cylinder_a = {"shape": "cylinder"}
    gradient_a = { "gradientangle": "0", "fillcolor": "yellow;0.3:blue"}
    oval_a = { "shape": "oval"}
    
    with Diagram("WolfspyreLabs Infra", show=False, graph_attr=graph_attr, direction="TB"):
        iNet = Internet("AT&T Uverse")
        with Cluster("Topology"):
            with Cluster("Vlan18"):
                with Cluster("Skwirreltrap"):
                    v18gw  = Opnsense('Evey/Atticus\r\n198.18.18.1')
                    rkevip = Nginx('rke.wolfspyre.io\r\n198.18.18.70')
                with Cluster("rancher control nodes"):
                    rkm01 = Server('rkm-01\r\n198.18.18.71')
                    rkm02 = Server('rkm-02\r\n198.18.18.72')
                    rkm03 = Server('rkm-03\r\n198.18.18.73')
                with Cluster('k8s'):
                    k8svip = Nginx('kube.wolfspyre.io\r\n198.18.18.80')
                    with Cluster('k8sworkers'):
                        k8wrk1 = VM("Worker-01\r\n198.18.18.81")
                        k8wrk2 = VM("Worker-01\r\n198.18.18.82")
                        k8wrk3 = VM("Worker-01\r\n198.18.18.83")
                        k8wrk4 = VM("Worker-01\r\n198.18.18.84")
                        k8wrk5 = VM("Worker-01\r\n198.18.18.85")
                k8s = [k8wrk1,k8wrk2,k8wrk3,k8wrk4,k8wrk5]
                rke = [rkm01,rkm02,rkm03]
                iNet - v18gw - rkevip - rke
                rke - k8svip - k8s
                
        with Cluster("WolfspyreLabs"):
            with Cluster("Skwirreltrap", graph_attr=noshow, direction="TB"):
                fwSkwrl = [ 
                    Opnsense("Evey", width=".6",height="0.6",fontsize="5",direction="TB"), 
                    Opnsense("Atticus", width=".6",height=".6",fontsize="5",direction="TB") 
                ]
            with Cluster("ProxMox"):
                with Cluster("ProxMox Nodes", graph_attr=hideme_child):
                    wplPXM = [
                        Pve("px-m-01", width="0.5",height="0.5",fontsize="5",direction="TB"),
                        Pve("px-m-02", width="0.5",height="0.5",fontsize="5",direction="TB"),
                        Pve("aced", width="0.5",height="0.5",fontsize="5",direction="TB")
                    ]
                with Cluster("Workloads"):
                    with Cluster("Virtual Machines", graph_attr=hideme ):
                        with Cluster("Rancher (k8s)", direction="TB"):
                            with Cluster("k8s Worker Nodes"):
                                wkr01=VM("Worker-01")
                                wkr02=VM("Worker-02")
                                wkr03=VM("Worker-03")
                                k8sWkrs=[wkr01,wkr02,wkr03]
                            with Cluster("Rancher Control Nodes"):
                                rkm01=Ubuntu("RKM-01")
                                rkm02=Ubuntu("RKM-02")
                                rkm03=Ubuntu("RKM-03")
                                rkm=[rkm01,rkm02,rkm03]                    
                        with Cluster("Infoblox", graph_attr=hideme_child):
                            with Cluster("Infoblox VMs", graph_attr=hideme_child):
                                nios5=VM("nios-5", width="0.1",height="0.1",fontsize="1")
                                nios6=VM("nios-6", width="0.1",height="0.1",fontsize="1")
                                nios7=VM("nios-7", width="0.1",height="0.1",fontsize="1")
                                wplnios = [ nios5,nios6,nios7]
                            wpldns = DNS("Infoblox DNS", width="0.1",height="0.1",fontsize="1") 
                    with Cluster("Containers"):
                        with Cluster("Ansible", graph_attr=hideme_child):
                            wplla = LXC("wplansible", width="0.1",height="0.1",fontsize="1") -\
                            Edge(label="testlabel", labeltooltip="http://evey.wolfspyre.io",style="dashed",fontsize="5") -\
                            Ansible("WPL_AUTOMATION", width="0.1",height="0.1",fontsize="1")
                        with Cluster("RancherControl"):
                            wpllr = LXC("Rancher Control Node") - Edge(label="testlabel") - Ubuntu("allthethings")
                fwSkwrl[0] - wplPXM[1]
                iNet - fwSkwrl[1]
                wplPXM[0] - wplla
                wplPXM[0] - wpllr
                wplPXM[2] -Edge(style="dashed") - wplnios
                wplPXM[2] -Edge(style="dashed") - rkm
                rkm[1]-Edge(style="dashed") - k8sWkrs
    
    
    
    
    #default_graph_attrs = {
    #        "pad": "2.0",
    #        "splines": "ortho",
    #        "nodesep": "0.60",
    #        "ranksep": "0.75",
    #        "fontname": "Sans-Serif",
    #        "fontsize": "15",
    #        "fontcolor": "#2D3436",
    #    }
    #default_node_attrs = {
    #        "shape": "box",
    #        "style": "rounded",
    #        "fixedsize": "true",
    #        "width": "1.4",
    #        "height": "1.4",
    #        "labelloc": "b",
    #        # imagepos attribute is not backward compatible
    #        # TODO: check graphviz version to see if "imagepos" is available >= 2.40
    #        # https://github.com/xflr6/graphviz/blob/master/graphviz/backend.py#L248
    #        # "imagepos": "tc",
    #        "imagescale": "true",
    #        "fontname": "Sans-Serif",
    #        "fontsize": "13",
    #        "fontcolor": "#2D3436",
    #    }
    #style: https://www.graphviz.org/doc/info/attrs.html#k:style
    # "dashed", "dotted", "solid", "invis" and "bold" for nodes and edges
    # "tapered" for edges only, and "filled", "striped", "wedged", "diagonals", "rounded" for nodes only. 
    # The styles "filled", "striped" and "rounded" are recognized for clusters. 
    # The style "radial" is recognized for nodes, clusters and graphs, and 
    # indicates a radial-style gradient fill if applicable.
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment