Skip to content

Commit

Permalink
feat: added reload coordinates from previous file version; added samp…
Browse files Browse the repository at this point in the history
…les for aws iam
  • Loading branch information
tsypuk committed May 14, 2023
1 parent 82367c6 commit 8cc38fa
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
venv/

dist/

/__pycache__/
*.iml


4 changes: 2 additions & 2 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def add_list(self, table_name='', rows=[]):
if 'y' in self.prev_coords[f'vertex:{table_name}:row:{index}']:
mx_geometry.set('y', self.prev_coords[f'vertex:{table_name}:row:{index}']['y'])

def add_vertex(self, id: str, node_name: str, ARN: str, metadata='', node_type=''):
def add_vertex(self, id: str, node_name: str, arn: str, metadata='', node_type=''):

# check that there is no such vertex already
exist = False
Expand All @@ -168,7 +168,7 @@ def add_vertex(self, id: str, node_name: str, ARN: str, metadata='', node_type='
'mxCell',
id=f'vertex:{node_type}:{id}',
# id = f'vertex:{ARN}',
value=f'<b>Name</b>: {node_name}<BR><b>ARN</b>: {ARN} {stringified_metadata}',
value=f'<b>Name</b>: {node_name}<BR><b>ARN</b>: {arn} {stringified_metadata}',
style=("verticalLabelPosition=bottom;"
"html=1;"
"verticalAlign=top;"
Expand Down
Empty file added samples/README.md
Empty file.
1 change: 1 addition & 0 deletions samples/output/iam_output.prod.iam-roles.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="drawio-plugin" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" modified="2023-05-14T18:06:49.551Z" version="20.5.3" etag="Cm7ZALJA5nENWioBdHw4" type="embed"><diagram id="diagram_1" name="AWS components"><mxGraphModel dx="618" dy="1680" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789:function:prod-lambda-name" value="&lt;b&gt;Name&lt;/b&gt;: prod-lambda-name&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:lambda:eu-west-1:123456789:function:prod-lambda-name " style="verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;shape=mxgraph.aws3.lambda_function;prIcon=server;fillColor=#F58534;gradientColor=none;html=1;" parent="1" vertex="1"><mxGeometry x="320" y="-40" width="69" height="72" as="geometry"/></mxCell><mxCell id="vertex:iam_role:arn:aws:iam::123456789:role/prod-lambda-name" value="&lt;b&gt;Name&lt;/b&gt;: role-lambda-name&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789:role/prod-lambda-name " style="verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;shape=mxgraph.aws3.role;fillColor=#759C3E;gradientColor=none;" parent="1" vertex="1"><mxGeometry x="350" y="180" width="94.5" height="79.5" as="geometry"/></mxCell><mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789:function:prod-lambda-name:to:iam_role:arn:aws:iam::123456789:role/prod-lambda-name" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789:function:prod-lambda-name" target="vertex:iam_role:arn:aws:iam::123456789:role/prod-lambda-name" edge="2"><mxGeometry as="geometry"/></mxCell><mxCell id="vertex:iam_policy:arn:aws:iam::123456789:policy/prod-cloudwatch-policy" value="&lt;b&gt;Name&lt;/b&gt;: prod-cloudwatch-policy&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789:policy/prod-cloudwatch-policy " style="verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#3F8624;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.policy;" parent="1" vertex="1"><mxGeometry x="40" y="270" width="78" height="67" as="geometry"/></mxCell><mxCell id="edge:iam_role:arn:aws:iam::123456789:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789:policy/prod-cloudwatch-policy" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789:policy/prod-cloudwatch-policy" edge="2"><mxGeometry as="geometry"/></mxCell><mxCell id="vertex:iam_policy:arn:aws:iam::123456789:policy/prod-s3-policy" value="&lt;b&gt;Name&lt;/b&gt;: prod-s3-policy&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789:policy/prod-s3-policy " style="verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#3F8624;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.policy;" parent="1" vertex="1"><mxGeometry x="270" y="400" width="78" height="67" as="geometry"/></mxCell><mxCell id="edge:iam_role:arn:aws:iam::123456789:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789:policy/prod-s3-policy" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789:policy/prod-s3-policy" edge="2"><mxGeometry as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
18 changes: 18 additions & 0 deletions samples/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions samples/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[tool.poetry]
name = "samples"
version = "0.1.0"
description = "Sample code example HOW-TO use multicloud-diagrams"
authors = ["Roman Tsypuk <tsypuk.conf@gmail.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.11"
multicloud-diagrams = "^0.2.0"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
30 changes: 30 additions & 0 deletions samples/samples/aws_iam_roles.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from multicloud_diagrams import MultiCloudDiagrams


def main():
mcd = MultiCloudDiagrams()

prefix = 'prod'
roles_file = f'../output/iam_output.{prefix}.iam-roles.drawio'

mcd.read_coords_from_file(roles_file)

func_arn = 'arn:aws:lambda:eu-west-1:123456789:function:prod-lambda-name'
mcd.add_vertex(id=func_arn, node_name='prod-lambda-name', arn=func_arn, node_type='lambda_function')
role_arn = 'arn:aws:iam::123456789:role/prod-lambda-name'
mcd.add_vertex(id=role_arn, node_name='role-lambda-name', arn=role_arn, node_type='iam_role')
mcd.add_link(src_node_id="lambda_function:" + func_arn, dst_node_id="iam_role:" + role_arn)

cw_policy_arn = "arn:aws:iam::123456789:policy/prod-cloudwatch-policy"
mcd.add_vertex(id=cw_policy_arn, node_name='prod-cloudwatch-policy', arn=cw_policy_arn, node_type='iam_policy')
mcd.add_link("iam_role:" + role_arn, "iam_policy:" + cw_policy_arn)

s3_policy_arn = "arn:aws:iam::123456789:policy/prod-s3-policy"
mcd.add_vertex(id=s3_policy_arn, node_name='prod-s3-policy', arn=s3_policy_arn, node_type='iam_policy')
mcd.add_link("iam_role:" + role_arn, "iam_policy:" + s3_policy_arn)

mcd.export_to_file(roles_file)


if __name__ == "__main__":
main()
Empty file added samples/tests/__init__.py
Empty file.

0 comments on commit 8cc38fa

Please sign in to comment.