AWS Branded clusters

pull/407/head
Dan Aharon-Shalom 5 years ago
parent c93af91f75
commit 62a2441401

@ -209,6 +209,9 @@ class Cluster:
"fontsize": "12", "fontsize": "12",
} }
_icon = None
_icon_size = 0
# fmt: on # fmt: on
# FIXME: # FIXME:
@ -230,8 +233,10 @@ class Cluster:
""" """
self.label = label self.label = label
self.name = "cluster_" + self.label self.name = "cluster_" + self.label
if not self._icon:
self.icon = icon self.icon = icon
self.icon_size = icon_size if not self._icon_size:
self._icon_size = icon_size
self.dot = Digraph(self.name) self.dot = Digraph(self.name)
@ -241,11 +246,11 @@ class Cluster:
# if an icon is set, try to find and instantiate a Node without calling __init__() # if an icon is set, try to find and instantiate a Node without calling __init__()
# then find it's icon by calling _load_icon() # then find it's icon by calling _load_icon()
if self.icon: if self._icon:
_node = self.icon(_no_init=True) _node = self._icon(_no_init=True)
if isinstance(_node,Node): if isinstance(_node,Node):
self.icon_label = '<<TABLE border="0"><TR><TD fixedsize="true" width="' + str(self.icon_size) +'" height="' + str(self.icon_size) +'"><IMG SRC="' + _node._load_icon() + '"></IMG></TD><TD>' + self.label + '</TD></TR></TABLE>>' self._icon_label = '<<TABLE border="0"><TR><TD fixedsize="true" width="' + str(self._icon_size) +'" height="' + str(self._icon_size) +'"><IMG SRC="' + _node._load_icon() + '"></IMG></TD><TD>' + self.label + '</TD></TR></TABLE>>'
self.dot.graph_attr["label"] = self.icon_label self.dot.graph_attr["label"] = self._icon_label
else: else:
self.dot.graph_attr["label"] = self.label self.dot.graph_attr["label"] = self.label

@ -2,7 +2,7 @@
AWS provides a set of services for Amazon Web Service provider. AWS provides a set of services for Amazon Web Service provider.
""" """
from diagrams import Node from diagrams import Node, Cluster
class _AWS(Node): class _AWS(Node):

@ -0,0 +1,104 @@
from diagrams import Cluster
from diagrams.aws.compute import EC2, ApplicationAutoScaling
from diagrams.aws.network import VPC, PrivateSubnet, PublicSubnet
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 VirtualPrivateCloud(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "",
"labeljust": "l",
"pencolor": "#00D110",
"fontname": "sans-serif",
"fontsize": "12",
}
# fmt: on
_icon = VPC
class PrivateSubnet(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "",
"labeljust": "l",
"pencolor": "#329CFF",
"fontname": "sans-serif",
"fontsize": "12",
}
# fmt: on
_icon = PrivateSubnet
class PublicSubnet(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "",
"labeljust": "l",
"pencolor": "#00D110",
"fontname": "sans-serif",
"fontsize": "12",
}
# fmt: on
_icon = PublicSubnet
class SecurityGroup(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "dashed",
"labeljust": "l",
"pencolor": "#FF361E",
"fontname": "Sans-Serif",
"fontsize": "12",
}
# fmt: on
class AutoScalling(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "dashed",
"labeljust": "l",
"pencolor": "#FF7D1E",
"fontname": "Sans-Serif",
"fontsize": "12",
}
# fmt: on
_icon = ApplicationAutoScaling
class EC2Contents(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "",
"labeljust": "l",
"pencolor": "#FFB432",
"fontname": "Sans-Serif",
"fontsize": "12",
}
# fmt: on
_icon = EC2

@ -0,0 +1,15 @@
from diagrams import Cluster
from diagrams.onprem.compute import Server
class ServerContents(Cluster):
# fmt: off
_default_graph_attrs = {
"shape": "box",
"style": "rounded,dotted",
"labeljust": "l",
"pencolor": "#A0A0A0",
"fontname": "Sans-Serif",
"fontsize": "12",
}
# fmt: on
_icon = Server

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

@ -0,0 +1,26 @@
from diagrams import Diagram, Edge
from diagrams.aws.cluster import *
from diagrams.aws.compute import EC2
from diagrams.onprem.container import Docker
from diagrams.onprem.cluster import *
from diagrams.aws.network import ELB
with Diagram(name="", direction="TB", show=True):
with Cluster("AWS"):
with Region("eu-west-1"):
with AvailabilityZone("eu-west-1a"):
with VirtualPrivateCloud(""):
with PrivateSubnet("Private"):
with SecurityGroup("web sg"):
with AutoScalling(""):
with EC2Contents("A"):
d1 = Docker("Container")
with ServerContents("A1"):
d2 = Docker("Container")
with PublicSubnet("Public"):
with SecurityGroup("elb sg"):
lb = ELB()
lb >> Edge(forward=True, reverse=True) >> d1
lb >> Edge(forward=True, reverse=True) >> d2
Loading…
Cancel
Save