Skip to content

Commit

Permalink
re-org files
Browse files Browse the repository at this point in the history
  • Loading branch information
haidaraM committed Mar 23, 2024
1 parent 10dd61f commit 98b406b
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 74 deletions.
69 changes: 0 additions & 69 deletions ansibleplaybookgrapher/__init__.py
Original file line number Diff line number Diff line change
@@ -1,69 +0,0 @@
# Copyright (C) 2024 Mohamed El Mouctar HAIDARA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.

from typing import Dict, List, Set, Tuple

from .graph_model import PlaybookNode, PlayNode, TaskNode, RoleNode, BlockNode
from .graph_model import (
PlaybookNode,
RoleNode,
PlayNode,
)
from .parser import PlaybookParser
from .parser import PlaybookParser
from .utils import merge_dicts


class Grapher:
def __init__(self, playbook_filenames: List[str]):
"""
:param playbook_filenames: List of playbooks to graph
"""
self.playbook_filenames = playbook_filenames

def parse(
self,
include_role_tasks: bool = False,
tags: List[str] = None,
skip_tags: List[str] = None,
group_roles_by_name: bool = False,
) -> Tuple[List[PlaybookNode], Dict[RoleNode, Set[PlayNode]]]:
"""
Parses all the provided playbooks
:param include_role_tasks: Should we include the role tasks
:param tags: Only add plays and tasks tagged with these values
:param skip_tags: Only add plays and tasks whose tags do not match these values
:param group_roles_by_name: Group roles by name instead of considering them as separate nodes with different IDs
:return: Tuple of the list of playbook nodes and the dictionary of the role usages: the key is the role and the
value is the set of plays that use the role.
"""
playbook_nodes = []
roles_usage: Dict[RoleNode, Set[PlayNode]] = {}

for playbook_file in self.playbook_filenames:
playbook_parser = PlaybookParser(
playbook_filename=playbook_file,
tags=tags,
skip_tags=skip_tags,
include_role_tasks=include_role_tasks,
group_roles_by_name=group_roles_by_name,
)
playbook_node = playbook_parser.parse()
playbook_nodes.append(playbook_node)

# Update the usage of the roles
roles_usage = merge_dicts(roles_usage, playbook_node.roles_usage())

return playbook_nodes, roles_usage
2 changes: 1 addition & 1 deletion ansibleplaybookgrapher/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from ansible.release import __version__ as ansible_version
from ansible.utils.display import Display

from ansibleplaybookgrapher import Grapher
from ansibleplaybookgrapher.grapher import Grapher
from ansibleplaybookgrapher.version import __prog__, __version__
from ansibleplaybookgrapher.renderer import OPEN_PROTOCOL_HANDLERS
from ansibleplaybookgrapher.renderer.graphviz import GraphvizRenderer
Expand Down
67 changes: 67 additions & 0 deletions ansibleplaybookgrapher/grapher.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Copyright (C) 2024 Mohamed El Mouctar HAIDARA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.

from typing import Dict, List, Set, Tuple

from .graph_model import (
PlaybookNode,
RoleNode,
PlayNode,
)
from .parser import PlaybookParser
from .utils import merge_dicts


class Grapher:
def __init__(self, playbook_filenames: List[str]):
"""
:param playbook_filenames: List of playbooks to graph
"""
self.playbook_filenames = playbook_filenames

def parse(
self,
include_role_tasks: bool = False,
tags: List[str] = None,
skip_tags: List[str] = None,
group_roles_by_name: bool = False,
) -> Tuple[List[PlaybookNode], Dict[RoleNode, Set[PlayNode]]]:
"""
Parses all the provided playbooks
:param include_role_tasks: Should we include the role tasks
:param tags: Only add plays and tasks tagged with these values
:param skip_tags: Only add plays and tasks whose tags do not match these values
:param group_roles_by_name: Group roles by name instead of considering them as separate nodes with different IDs
:return: Tuple of the list of playbook nodes and the dictionary of the role usages: the key is the role and the
value is the set of plays that use the role.
"""
playbook_nodes = []
roles_usage: Dict[RoleNode, Set[PlayNode]] = {}

for playbook_file in self.playbook_filenames:
playbook_parser = PlaybookParser(
playbook_filename=playbook_file,
tags=tags,
skip_tags=skip_tags,
include_role_tasks=include_role_tasks,
group_roles_by_name=group_roles_by_name,
)
playbook_node = playbook_parser.parse()
playbook_nodes.append(playbook_node)

# Update the usage of the roles
roles_usage = merge_dicts(roles_usage, playbook_node.roles_usage())

return playbook_nodes, roles_usage
2 changes: 1 addition & 1 deletion ansibleplaybookgrapher/renderer/mermaid.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

from ansible.utils.display import Display

from ansibleplaybookgrapher import BlockNode, RoleNode, TaskNode, PlayNode, PlaybookNode
from ansibleplaybookgrapher.graph_model import BlockNode, RoleNode, TaskNode, PlayNode, PlaybookNode
from ansibleplaybookgrapher.renderer import PlaybookBuilder, Renderer

display = Display()
Expand Down
2 changes: 1 addition & 1 deletion ansibleplaybookgrapher/version.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
__version__ = "2.2.0-dev"
__version__ = "2.2.0.dev0"
__prog__ = "ansible-playbook-grapher"
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[metadata]
description-file = Readme.md
description_file = Readme.md

[bdist_wheel]
universal = 1
Expand Down
2 changes: 1 addition & 1 deletion tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import pytest
from ansible.utils.display import Display

from ansibleplaybookgrapher import PlaybookParser
from ansibleplaybookgrapher.parser import PlaybookParser
from ansibleplaybookgrapher.cli import PlaybookGrapherCLI
from ansibleplaybookgrapher.graph_model import (
TaskNode,
Expand Down

0 comments on commit 98b406b

Please sign in to comment.