diff --git a/diagrams/azure/cluster.py b/diagrams/azure/cluster.py new file mode 100644 index 00000000..73bfcdae --- /dev/null +++ b/diagrams/azure/cluster.py @@ -0,0 +1,143 @@ +from diagrams import Cluster +from diagrams.azure.compute import VM, VMWindows, VMLinux #, VMScaleSet # Depends on PR-404 +from diagrams.azure.network import VirtualNetworks, Subnets, NetworkSecurityGroupsClassic + +class Subscription(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "dotted", + "labeljust": "l", + "pencolor": "#AEB6BE", + "fontname": "Sans-Serif", + "fontsize": "12", + } + # fmt: on + +class Region(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "dotted", + "labeljust": "l", + "pencolor": "#AEB6BE", + "fontname": "Sans-Serif", + "fontsize": "12", + } + # fmt: on + +class AvailabilityZone(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "dashed", + "labeljust": "l", + "pencolor": "#27a0ff", + "fontname": "sans-serif", + "fontsize": "12", + } + # fmt: on + +class VirtualNetwork(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "", + "labeljust": "l", + "pencolor": "#00D110", + "fontname": "sans-serif", + "fontsize": "12", + } + # fmt: on + _icon = VirtualNetworks + +class SubnetWithNSG(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "", + "labeljust": "l", + "pencolor": "#329CFF", + "fontname": "sans-serif", + "fontsize": "12", + } + # fmt: on + _icon = NetworkSecurityGroupsClassic + +class Subnet(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "", + "labeljust": "l", + "pencolor": "#00D110", + "fontname": "sans-serif", + "fontsize": "12", + } + # fmt: on + _icon = Subnets + +class SecurityGroup(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "dashed", + "labeljust": "l", + "pencolor": "#FF361E", + "fontname": "Sans-Serif", + "fontsize": "12", + } + # fmt: on + +class VMContents(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "", + "labeljust": "l", + "pencolor": "#FFB432", + "fontname": "Sans-Serif", + "fontsize": "12", + } + # fmt: on + _icon = VM + +class VMLinuxContents(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "", + "labeljust": "l", + "pencolor": "#FFB432", + "fontname": "Sans-Serif", + "fontsize": "12", + } + # fmt: on + _icon = VMLinux + +class VMWindowsContents(Cluster): + # fmt: off + _default_graph_attrs = { + "shape": "box", + "style": "", + "labeljust": "l", + "pencolor": "#FFB432", + "fontname": "Sans-Serif", + "fontsize": "12", + } + # fmt: on + _icon = VMWindows + +# Depends on PR-404 +# class VMSS(Cluster): +# # fmt: off +# _default_graph_attrs = { +# "shape": "box", +# "style": "dashed", +# "labeljust": "l", +# "pencolor": "#FF7D1E", +# "fontname": "Sans-Serif", +# "fontsize": "12", +# } +# # fmt: on +# _icon = VMScaleSet diff --git a/examples/azure.png b/examples/azure.png new file mode 100644 index 00000000..04af158c Binary files /dev/null and b/examples/azure.png differ diff --git a/examples/azure.py b/examples/azure.py new file mode 100644 index 00000000..e0948879 --- /dev/null +++ b/examples/azure.py @@ -0,0 +1,24 @@ +from diagrams import Diagram, Edge +from diagrams.azure.cluster import * +from diagrams.azure.compute import VM +from diagrams.onprem.container import Docker +from diagrams.onprem.cluster import * +from diagrams.azure.network import LoadBalancers + +with Diagram(name="", filename="azure", direction="TB", show=True): + with Cluster("Azure"): + with Region("East US2"): + with AvailabilityZone("Zone 2"): + with VirtualNetwork(""): + with SubnetWithNSG("Private"): + # with VMScaleSet(""): # Depends on PR-404 + with VMContents("A"): + d1 = Docker("Container") + with ServerContents("A1"): + d2 = Docker("Container") + + with Subnet("Public"): + lb = LoadBalancers() + + lb >> Edge(forward=True, reverse=True) >> d1 + lb >> Edge(forward=True, reverse=True) >> d2