Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions python/diff-nautobot-understack/diff_nautobot_understack/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
from diff_nautobot_understack.network.main import (
openstack_network_diff_from_ucvni_network,
)
from diff_nautobot_understack.project.main import (
openstack_all_projects_diff_from_nautobot_tenant,
)
from diff_nautobot_understack.project.main import (
openstack_project_diff_from_nautobot_tenant,
)
Expand Down Expand Up @@ -62,6 +65,19 @@ def tabular_output(diffs, title, id_column_name):
console.print(table)


@app.command()
def projects(
debug: bool = typer.Option(False, "--debug", "-v", help="Enable debug mode"),
output_format: str = typer.Option(
"json", "--format", help="Available formats json, table"
),
):
"""OpenStack projects ⟹ Nautobot tenants"""
settings.debug = debug
diff_result = openstack_all_projects_diff_from_nautobot_tenant()
display_output(diff_result, "project", output_format)


@app.command()
def project(
name: str,
Expand All @@ -70,7 +86,7 @@ def project(
"json", "--format", help="Available formats json, table"
),
):
"""Nautobot tenantsOpenstack projects"""
"""OpenStack projectsNautobot tenants"""
settings.debug = debug
diff_result = openstack_project_diff_from_nautobot_tenant(os_project=name)
display_output(diff_result, "project", output_format)
Expand All @@ -83,7 +99,7 @@ def network(
"json", "--format", help="Available formats json, table"
),
):
"""Nautobot ucvnisOpenstack networks"""
"""OpenStack networksNautobot UCVNIs"""
settings.debug = debug
diff_result = openstack_network_diff_from_ucvni_network()
display_output(diff_result, "network", output_format)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,29 @@ def load(self):
description=tenant.get("description"),
)
)


class Tenants(Adapter):
"""All tenants."""

project = models.ProjectModel

top_level = ["project"]
type = "Tenant"

def __init__(self, **kwargs):
super().__init__(**kwargs)
self.api_client = API()

def load(self):
url = "/api/tenancy/tenants/?include=relationships"
tenants_response = self.api_client.make_api_request(url, paginated=True)

for tenant in tenants_response:
self.add(
self.project(
id=_remove_hyphens(tenant.get("id")),
name=tenant.get("name"),
description=tenant.get("description"),
)
)
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,25 @@ def load(self):
description=os_project.description,
)
)


class Projects(Adapter):
project = models.ProjectModel

top_level = ["project"]
type = "OpenstackProject"

def __init__(self, **kwargs):
super().__init__(**kwargs)
openstack_api = API()
self.cloud = openstack_api.cloud_connection

def load(self):
for os_project in self.cloud.identity.projects():
self.add(
self.project(
id=os_project.id,
name=os_project.name,
description=os_project.description,
)
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
from diffsync.enum import DiffSyncFlags

from diff_nautobot_understack.project.adapters.nautobot_tenant import Tenant
from diff_nautobot_understack.project.adapters.nautobot_tenant import Tenants
from diff_nautobot_understack.project.adapters.openstack_project import Project
from diff_nautobot_understack.project.adapters.openstack_project import Projects
from diff_nautobot_understack.settings import app_settings as settings


Expand All @@ -17,3 +19,15 @@ def openstack_project_diff_from_nautobot_tenant(os_project=None) -> Diff:
openstack_project, flags=DiffSyncFlags.CONTINUE_ON_FAILURE
)
return tenant_destination_openstack_project_source


def openstack_all_projects_diff_from_nautobot_tenant() -> Diff:
openstack_project = Projects()
openstack_project.load()

nautobot_tenant = Tenants()
nautobot_tenant.load()
tenant_destination_openstack_project_source = nautobot_tenant.diff_from(
openstack_project, flags=DiffSyncFlags.CONTINUE_ON_FAILURE
)
return tenant_destination_openstack_project_source