PXM-cluster-WIP
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.
Please register or sign in to comment