-
Notifications
You must be signed in to change notification settings - Fork 0
/
blueprint.py
62 lines (50 loc) · 2.02 KB
/
blueprint.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from pathlib import Path
from diagrams import Diagram, Cluster, Edge
from diagrams.aws.compute import EC2Instance, EC2AutoScaling
from diagrams.aws.devtools import Codedeploy
from diagrams.aws.general import User
from diagrams.aws.network import ALB
from diagrams.generic.os import Windows
from diagrams.onprem.ci import GithubActions
from diagrams.onprem.vcs import Github
class ALBExample:
def __init__(self):
self.graph_attr = {
"layout": "dot",
"compound": "true", # make edge can link cluster border
"center": "true"
}
self.path = Path(__file__).parent.parent.joinpath("assets")
def blueprint(self):
with Diagram(
name="CodeDeploy",
filename=self.path.joinpath('codedeploy1').as_posix(),
show=False,
direction='LR',
graph_attr=self.graph_attr
):
windows = Windows("Github DeskTop")
with Cluster('Github'):
git = Github("Repo")
git_action = GithubActions("CI/CD")
git >> Edge(color="darkblue", label="Triggers") >> git_action
code_deploy = Codedeploy("Codedeploy")
windows >> Edge(color="darkblue", label="Commit&push") >> git
git_action >> Edge(
color="darkblue",
label="Triggers") >> code_deploy
with Cluster('ASG'):
ec2s = [
EC2Instance("EC2Instance"),
EC2Instance("EC2Instance"),
EC2Instance("EC2Instance")]
asg = EC2AutoScaling("EC2AutoScaling")
asg >> Edge(color="darkblue", label="Roll update") >> ec2s
code_deploy >> Edge(color="darkblue", label="Roll update") >> asg
user = User("User")
alb = ALB("ALB")
user >> Edge(color="black", label="Visit") >> alb
alb >> Edge(color="black", label="Forward") >> ec2s
if __name__ == '__main__':
demo = ALBExample()
demo.blueprint()