Giter VIP home page Giter VIP logo

nautobot-app-floor-plan's Introduction

Nautobot

Nautobot

Nautobot is a Network Source of Truth and Network Automation Platform built as a web application atop the Django Python framework with a PostgreSQL or MySQL database.

Key Use Cases

1. Flexible Source of Truth for Networking - Nautobot core data models are used to define the intended state of network infrastructure enabling it as a Source of Truth. While a baseline set of models are provided (such as IP networks and addresses, devices and racks, circuits and cable, etc.) it is Nautobot's goal to offer maximum data model flexibility. This is enabled through features such as user-defined relationships, custom fields on any model, and data validation that permits users to codify everything from naming standards to having automated tests run before data can be populated into Nautobot.

2. Extensible Data Platform for Automation - Nautobot has a rich feature set to seamlessly integrate with network automation solutions. Nautobot offers GraphQL and native Git integration along with REST APIs and webhooks. Git integration dynamically loads YAML data files as Nautobot config contexts. Nautobot also has an evolving plugin system that enables users to create custom models, APIs, and UI elements. The plugin system is also used to unify and aggregate disparate data sources creating a Single Source of Truth to streamline data management for network automation.

3. Platform for Network Automation Apps - The Nautobot plugin system enables users to create Network Automation Apps. Apps can be as lightweight or robust as needed based on user needs. Using Nautobot for creating custom applications saves up to 70% development time by re-using features such as authentication, permissions, webhooks, GraphQL, change logging, etc. all while having access to the data already stored in Nautobot. Some production ready applications include:

The complete documentation for Nautobot can be found at Read the Docs.

Questions? Comments? Start by perusing our GitHub discussions for the topic you have in mind, or join the #nautobot channel on Network to Code's Slack community!

Build Status

Branch Status
main Build Status
develop Build Status
next Build Status

Screenshots

Gif of main page


Gif of config contexts


Gif of prefix hierarchy


Gif of GraphQL


Gif of Modes

Installation

Please see the documentation for instructions on installing Nautobot.

Application Stack

Below is a simplified overview of the Nautobot application stack for reference:

Application stack diagram

Plugins and Extensibility

Nautobot offers the ability to customize your setup to better align with your direct business needs. It does so through the use of various plugins that have been developed for network automation, and are designed to be used in environments where needed.

There are many plugins available within the Nautobot Apps ecosystem. The below screenshots are an example of some popular ones that are currently available.

Plugin Screenshots

Golden Config Plugin

Gif of golden config

ChatOps Plugin

Gif of chatops

Device Lifecycle Management Plugin

Gif of DLM

Providing Feedback

The best platform for general feedback, assistance, and other discussion is our GitHub discussions. To report a bug or request a specific feature, please open a GitHub issue using the appropriate template.

If you are interested in contributing to the development of Nautobot, please read our contributing guide prior to beginning any work.

Related projects

Please check out the GitHub nautobot topic for a list of relevant community projects.

Notices

Nautobot was initially developed as a fork of NetBox (v2.10.4). NetBox was originally developed by Jeremy Stretch at DigitalOcean and the NetBox Community.

nautobot-app-floor-plan's People

Contributors

cmsirbu avatar dependabot[bot] avatar distantvoyager avatar glennmatthews avatar itdependsnetworks avatar joewesch avatar nautobot-bot avatar pszulczewski avatar snaselj avatar tsm1th avatar ubajze avatar whitej6 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

tsm1th

nautobot-app-floor-plan's Issues

Floor Plan Tiles navigation link produces error

Environment

  • Python version: 3.10.13
  • Nautobot version: 2.0.5
  • nautobot-floor-plan version: 2.0.0

Expected Behavior

I assumed there would be a list view of the tiles on a floor plan (or something)

Observed Behavior

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/usr/local/lib/python3.10/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/usr/local/lib/python3.10/site-packages/rest_framework/response.py", line 70, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/views/renderers.py", line 278, in render
    return super().render(data, accepted_media_type=accepted_media_type, renderer_context=renderer_context)
  File "/usr/local/lib/python3.10/site-packages/rest_framework/renderers.py", line 723, in render
    context = self.get_context(data, accepted_media_type, renderer_context)
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/views/renderers.py", line 174, in get_context
    table = self.construct_table(view, request=request, permissions=permissions)
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/views/renderers.py", line 63, in construct_table
    table_class = view.get_table_class()
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/views/mixins.py", line 310, in get_table_class
    self.table_class is not None

Exception Type: AssertionError at /plugins/floor-plan/floor-plan-tiles/
Exception Value: 'FloorPlanTileUIViewSet' should include a `table_class` attribute for bulk operations

Steps to Reproduce

  1. Go to a floor plan in the UI
  2. Click on a tile
  3. Click on the link in the navigation bar to Floor Plan Tiles

For example, on this page you can see the navigation bar read:

Locations / Europe → Netherlands → AMS01 → ams01-dc-pod-1 / Floor Plan for Location "ams01-dc-pod-1" / Floor Plan Tiles / Tile (2, 2, 2, 2) in Floor Plan for Location "ams01-dc-pod-1"

And clicking on Floor Plan Tiles produces the error.

increase size of displayed text

Environment

  • Nautobot version: 1.6.0
  • nautobot-floor-plan version: 0.1.0

Proposed Functionality

increase size of displayed text

Use Case

When creating DC room, which is midsize or larger (in my example 78x36 tiles) the displayed objects are nicely visible but their text is so small that it is unreadable.
To read the text it is needed to zoom in quiet a lot on each object. After zooming in on fourth/fifth object one does forgot what was on the first. This makes the tool usable only for small rooms.

Racks can move to new Locations while remaining in previous Floorplan

Environment

  • Python version: 3.10.13
  • Nautobot version: 2.0.5
  • nautobot-floor-plan version: 2.0.0

Steps to Reproduce

  1. Associate a Rack to a Floorplan Tile for one Location
  2. Edit the Rack's Location to a different Location

Expected Behavior

I expected an error that says the Rack is associated with a Floorplan Tile in that Location and can't currently move.

Observed Behavior

The Rack moves to the new Location, but it's still on the Floorplan in the original Location.

Colors Not Accurate in Dark Mode

Environment

  • Python version: Unknown. Demo sandbox, not specified in nautobot-lab container image.
  • Nautobot version: 2.0.5
  • nautobot-floor-plan version: 2.0.0

Observed Behavior

On the Nautobot demo deployment, in dark mode, colors on the floor plan page do not always match the original Organization –> Statuses object.

Expected Behavior

The Floor Plan page should display the same color as selected in the Organization –> Statuses object.

I began by following the introduction to the Floor Plan Plugin here: https://blog.networktocode.com/post/nautobot-floor-plan-app/

Steps to Reproduce

  1. Create two new Statuses under Organization –> Statuses. Names can be anything, Colors should be Yellow and Amber.
  2. Add a tile object to a Location Floor Plan using the new statuses.
  3. Export the SVG of the Floorplan.
  4. Compare the colors in the live, Dark Mode view and the exported SVG. They will be different.

Two images included to show the difference:
Light Mode:
Screen Shot 2023-12-11 at 7 33 49 PM

Dark Mode:
Screen Shot 2023-12-11 at 7 34 22 PM

Rack orientation in data model and SVG render

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

  • Ability to specify which of the four cardinal directions a given Rack is oriented relative to the FloorPlan (+x, +y, -x, -y)
  • Enhance SVG rendering to clearly identify the front and rear of each Rack as part of the render.

Use Case

More detailed documentation of reality, improve communication when installing a new rack in the data center, etc.

Zooming with scroll wheel should not also scroll the page view

Environment

  • Python version:
  • Nautobot version:
  • nautobot-floor-plan version: 1.0

Expected Behavior

  • Scroll wheel inside the floor plan should zoom the floor plan without scrolling the page
  • Scroll wheel outside the floor plan should scroll the page without zooming the floor plan

Observed Behavior

When I have the cursor inside the plan and I try to zoom it also scrolls up and down.

Feature request for Fractional tile usage in Nautobot Floor plan

Environment

  • Nautobot version: any
  • nautobot-floor-plan version: any

Proposed Functionality

Implement fractional tile assignment

Use Case

As a floorplan owner I have racks that do not exactly match tiles, for example:
My tiles have a 60x60cm grid,
while my racks have either a 60x80cm, or an 60x100cm size, sometimes they are 60x120cm, consisting of two tiles for one rack.
Sometimes my racks are a little bit wider, like 80cm wide. Also this should be able to be visible on the floor plan, as it will influence the ability to exchange a cabinet.

As a floorplan owner I would like to be able to use fractional tile usage with a minimum of two digits for the fraction (being able to make 1/4 assignments)
Above sizing is an example and can differentiate from actual common rack sizes

Custom grid numbering in SVG render

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

Different users may have different grid numbering requirements when rendering as SVG, for example:

  • alphabetical X axis (and what to do after A=26, "AA, AB, AC,..." or "A1, B1, C1, ..." or ...?) but numerical Y axis
  • grid numbering to start at 0 or 5 instead of 1 (or some letter of the alphabet other than A)
  • grid numbers to increment by 2 per tile instead of 1 per tile (or, eek, even half-steps per tile?)

Use Case

Improved flexibility, support for more use cases.

Rack from location children not available in floor plan tile

Environment

  • Python version: 3.10.12
  • Nautobot version: 1.6.1
  • nautobot-floor-plan version: 1.0.0

Context

I have the following location tree implemented in nautobot:
Room-1 (Location Type: Room)
--> Row A (Location Type: Row - Children of Room Type)
--> Row B (Location Type: Row - Children of Room Type)
--> Row C (Location Type: Row - Children of Room Type)
--> Row D (Location Type: Row - Children of Room Type)

With some racks affected to the different rows:
- A0 --> Row A
- A1 --> Row A
- B6 --> Row B
- ...

Expected Behavior

When I want to create the Floor plan for my Room-1, I want to affect the rack A0 to the first line and first column
From the floor plan tile, I would like to be able to select all racks assigned to my room or whose room is parent to the location of my racks

Observed Behavior

Nothing is selectable under the floor plan tile
When I change a rack from Row A location to the parent Room-1, the rack is selectable

Steps to Reproduce

  1. Create 2 types of Locations (Room and Row: Room is the parent of Row)
  2. Create a Location Room and one or many Location Row(s) in the room
  3. Create one or more rack unit affected to a Location Row
  4. Create a Floor Plan affected to the Room
  5. Try to select a rack in the Tile

Status - Not Assigned By Default

Environment

  • Nautobot version:
  • nautobot-floor-plan version:

Proposed Functionality

When adding a rack to a floor plan without changing any settings, the status option is not available

Use Case

Status' should be available for an app.

Prometheus Metrics

Environment

  • Nautobot version:
  • nautobot-floor-plan version: 1.0

Proposed Functionality

Need to think about what Prometheus metrics should be exposed by this app. Some sort of space utilization metric? Number of racks per status per row/column?

Use Case

Option for a Rack to occupy multiple adjacent tiles

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

Depending on the layout, it might be desirable for a Rack to occupy multiple tiles, e.g. 2x1, 1x2, 2x2 areas.

Use Case

More accurate modeling of floor plans.

Add ability to see the tile counts with a hyperlink inside the floor plan detail view

Environment

  • Nautobot version: 2.0.5
  • nautobot-floor-plan version: 2.0.0

Proposed Functionality

Ability to see how many children exists for a given floor plan and a link to access them

Use Case

There is no good way to access the "floor plan tile" view and this would allow access via the parent's detail page. The count and hyperlink will be available via the "Children" field.

image

Graphical bulk-edit of FloorPlanTiles

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

It would be useful to have some sort of ability in the UI to select a group (such as a row, column, or rectangle) of FloorPlanTiles and bulk-edit them, primarily as a way to update the Status of many such tiles at once instead of having to click one at a time and edit each tile individually.

Use Case

UX

Cluster missing in Device bulk edit parameters

Environment

  • Nautobot version: 1.6.3

Proposed Functionality

Use Case

In our case a lots of Devices needed to be moved from Site A to Site B. Site is one of parameters which can be changed in bulk update but this change ended with an error as those devices were assigned to a Cluster which is still on Site A.
I have advised to our Data Center Management team that they should first go to the each Cluster, unassigned those Devices and then change the Site parameter. It would be great if we could set Cluster to null and change Site in one bulk edit.

Underlay an ImageAttachment from the base Location when rendering the SVG

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

Nautobot provides the ability to upload and associate images to a Location as ImageAttachments. It would be really nice if we could select a specific one of these attachments (e.g., a blueprint) to associate to the FloorPlan and have the SVG rendering of the FloorPlan overlay the tiles atop this image.

Known challenges this would pose:

  • Would need to be able to easily adjust the position and scale of the image relative to the rendered grid (some sort of grab-and-drag feature in the UI?)
  • LIkelihood that a constant grid as we have now would not align well with different parts of a blueprint (e.g. offset rows, racks oriented north/south versus east/west needing different grid alignment, etc.)

Use Case

Improved usability

Attachment of PowerFeeds to FloorPlanTiles

Environment

  • Nautobot version:
  • nautobot-floor-plan version: 1.0

Proposed Functionality

In addition to Racks, a data center will often have PowerFeeds in Nautobot as well, and it would be helpful to be able to also locate these on the FloorPlan at specific grid positions.

Assign RackGroups to a range of coordinates

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

It would be helpful to be able to define a "bounding box" for RackGroups within a Location and render that information on the FloorPlan SVG. For example, specifying that RackGroup "Aisle 1" covers the set of tiles falling between (1, 1) and (3, 20).

Possibly even provide an option to enforce this in some fashion, such as preventing you from associating a Rack to a tile that falls within a RackGroup that the Rack isn't a member of?

Use Case

Data modeling, representation of reality.

Highlight Rack Location When Navigated From Rack View

Environment

  • Nautobot version:
  • nautobot-floor-plan version:

Proposed Functionality

Would like to have the rack that was navigated from within Nautobot to be highlighted or shown as where the navigation occurred from.

Use Case

Better visualization of rack information when getting to the map. Similar to the blue dot idea of Maps applications on mobile devices.

Code review

Development environment setup (cookie issues?)

invoke build fails with default docker-compose.base.yml:

Building Nautobot with Python 3.7...
Running docker-compose command "build"
parsing /home/gary/github/nautobot-plugin-floor-plan/development/docker-compose.base.yml: yaml: unmarshal errors:
  line 25: mapping key "<<" already defined at line 24

After commenting out line 25 <<: *nautobot-base, the build works but then the image name doesn't work:

The local development image builds as nautobot_floor_plan-nautobot but the dockerfile uses nautobot-floor-plan/nautobot:${NAUTOBOT_VER}-py${PYTHON_VER}

Same error seen with the docs service in docker-compose.dev.yml

Commented out line in postgres docker compose file

Documentation

Hard-coded link on the index page of the docs makes for a confusing dev experience when trying to read the docs in the dev docs container. This is due to the index of the docs reusing the main projects README.md

mkdocs.yml copyright is "Copyright &copy; The Authors". Is this correct?

Minimum version

Dockerfile is defaulting to nautobot version 1.0.1. Should this be the version when locations were introduced?

__init__.py min_version is set to 1.4.0

.cookiecutter.json min_nautobot_version is set to 1.5.0

pyproject.toml is set to nautobot ^1.4.0

Should these be aligned?

UX

Using the mousewheel to zoom the floor plan also scrolls the page. (#16)

A full screen view of the floor plan would be really nice. Trying to pan a large floor plan vertically with the floor plan constrained to the bottom of the view is frustrating.

500 error when navigating to /plugins/floor-plan/floor-plan-tiles/

Duplicated edit buttons on floor plan detail view

Adding a tile and then resizing the floor plan to be too small to fit that tile does not delete the tile. Should the tiles be deleted to prevent invalid data from being left in the database?

Filters

RackFilterExtension.nautobot_floor_plan_floor_plan is a ModelChoiceFilter. Is it possible to make this a ModelMultipleChoiceFilter to match the majority of filters in core and the FloorPlanTileFilterSet.floor_plan filter?

Feature request? (nitpick)

The floor plan detail page shows rows for Tile Width (Relative Units) and Tile Depth (Relative Units). I think this could do a better job of portraying the actual meaning if the unit of measurement could be selected and then was used in these rows. ex: if I set units to parsecs the row would say Tile Width (parsecs): 1000

Misc

Commented out line in models.py

And here

Might be helpful to add help text to the FloorPlanTile x_origin and y_origin explaining that (1,1) is top left

FloorPlanTile.bounds would be a good candidate for a namedtuple

Document uses of Status to aid in floor plan diagramming

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

Document the definition of custom Statuses to aid in use of this app, including:

  • Requirement for at least one Status associated to FloorPlanTile content-type before defining any FloorPlanTiles
  • Creation and use of an "Unavailable" status or similar to aid in diagramming non-rectangular Locations
  • Creation and use of other information statuses, such as "Hot Aisle" and "Cold Aisle".

Use Case

User guide, ease of adoption

Association of Tenants/TenantGroups to a tile or group of tiles

Environment

  • nautobot-floor-plan version: 0.9

Proposed Functionality

Similar to #10, but allowing for the documentation and display of which Tenant(s) or TenantGroup(s) are assigned to a given group of tiles. Not clear at this time whether this would be a separate mapping between Tenant(Group) and FloorPlanTile, or whether this would just be an enhancement to the SVG render to display tenancy information derived from the Rack(Group).

Use Case

More information easily visible to user.

missing name parameter and possibility of multiple floor plans per location

Environment

  • Nautobot version: 1.6.0
  • nautobot-floor-plan version: 0.1.0

Proposed Functionality

I want to be able to create more than one floor plan per location. And I want to be able to search the floor plan based on defined name.

Use Case

Floor plan does not have a name parameter. It has only display parameter which can't be set but is derived from location, e.g. "Floor Plan for Location "room_x". This cause two problems:

  1. Floor plan can be searched only by location or displayed name which is derived from location

  2. We are unable to create more floor plans per location. Below are use cases for this request:
    a ) creation of two or three floor plan versions for discussion with Datacenter team to find out which will be most useful
    b) create temporary floor plan just for discussion about moving something it the room

Migrate to Nautobot 2.0

Environment

  • Nautobot version:
  • nautobot-floor-plan version:

Proposed Functionality

Migrate to support Nautobot 2.0

Use Case

I want to be able to use the Floor Plan Plugin in Nautobot 2.0

Zooming in/out and scrolling down is awkward

Environment

  • Python version: demo.nautobot.com as of 8/8/23
  • Nautobot version: demo.nautobot.com (1.5.23)
  • nautobot-floor-plan version: 1.0

For smaller floor plans, it is awkward/non-intuitive to scroll down to view the lower part of the floor plan on the screen

Expected Behavior

I understand the getting the UI right is tough for this type of thing. In general, if my cursor is on the floor plan drawing itself, I expect to zoom in/out if I scroll up/down on the mouse. If my mouse is anywhere else on the page that is not the floor plan rendering, I expect to use the mouse scroll to scroll up or down on the page.

  • When I am at minimum zoom, I expect to be able to use the mouse's scroll down capability to scroll down to the bottom of the floor plan drawing

  • When I want to scroll up with the mouse and the floor plan is showing on the page, I expect to be able to scroll up to the top of the page if the mouse itself is not on the floor plan diagram

  • When I want to zoom in or out on the floor plan diagram, I expect to be able to place my mouse on the diagram and scroll up/down to zoom in/out; otherwise, the page will scroll up or down when I use the mouse scroll.

Observed Behavior

When I attempt to scroll down with the mouse, the page scrolls down until the floor plan becomes about half visible, then the scroll-down function turns into a zoom out function and since I am already at the lowest zoom, the downward scrolling just stops. In order to scroll down to view the lower half of the floor plan, I have to move the mouse to the scroll bar on the right hand side and use the scroll bar

When I attempt to scroll to the top of the page or the floor plan drawing via scrolling up with the mouse, it zooms in on the floor plan diagram, even if my mouse is not on the floor plan drawing itself (the mouse is somewhere on the page that is not allocated to the drawing)

Steps to Reproduce

  1. Go to demo.nautobot.com floor plan https://demo.nautobot.com/plugins/floor-plan/floor-plans/a593b70e-391b-4036-873a-3704a42a0457/?tab=main
  2. Try to scroll to view the lower half of the floor plan diagram using the mouse (it will go to minimum zoom on the floor plan and then the downward mouse scrolls will have no effect)
  3. Then try to scroll to the top of the page using the mouse (it will zoom in on the floor plan)
  4. Steps 2 and 3 currently require me to move the mouse to the page's scroll bar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.