Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c8f5d728c | ||
|
|
6eb20004f9 | ||
|
|
836d9f40d7 | ||
|
|
607347ff18 | ||
|
|
0f6051731a | ||
|
|
3c9aebfd2f | ||
|
|
60a5fe1eae | ||
|
|
3fbeb97810 | ||
|
|
f3b822e18d | ||
|
|
555c1fac4c | ||
|
|
cf8641939a | ||
|
|
2893fff111 | ||
|
|
25fdcb6cf4 | ||
|
|
5d330bc830 | ||
|
|
03b8c9c76e | ||
|
|
02a7118a33 | ||
|
|
44e49495fe | ||
|
|
f4b1e34826 | ||
|
|
f8c6e9e193 | ||
|
|
19adcab4a9 | ||
|
|
d2d2106246 | ||
|
|
9072faf7cf | ||
|
|
6f43b959bd | ||
|
|
1048feff52 | ||
|
|
7ff0a9650f | ||
|
|
8d5de5c49f | ||
|
|
96afdf8d83 | ||
|
|
aba0598947 | ||
|
|
142de460b9 | ||
|
|
2600209724 | ||
|
|
ed8a717bc5 | ||
|
|
0b7046b10d | ||
|
|
e784e717ca | ||
|
|
2895294903 | ||
|
|
8368ffa2fd | ||
|
|
23428c8ad2 | ||
|
|
c00b8c2cfe | ||
|
|
32003e59f9 | ||
|
|
bd32642b5c | ||
|
|
f463804087 | ||
|
|
b92b012309 | ||
|
|
74c295837c | ||
|
|
a543f5cb0c | ||
|
|
50c90a4328 | ||
|
|
374a88266a | ||
|
|
60cbc94a62 | ||
|
|
649305c83e | ||
|
|
b3397f4f4a | ||
|
|
a23604261a | ||
|
|
d9571b30b5 | ||
|
|
76b43f5d1e | ||
|
|
becfaaa054 | ||
|
|
bec301eb9d | ||
|
|
f28623b378 | ||
|
|
16837047be | ||
|
|
987c7ef34c | ||
|
|
dbe331afb8 | ||
|
|
86c0c55896 | ||
|
|
78b8a5ae97 | ||
|
|
71e4807cb1 | ||
|
|
dfbe26318f | ||
|
|
debc314714 | ||
|
|
d14d9c1414 | ||
|
|
d48d213b2c | ||
|
|
e5e5a8a0ef | ||
|
|
1b64f40564 | ||
|
|
33a198517b | ||
|
|
daf35c097d | ||
|
|
63b9775218 | ||
|
|
69cd2c431c | ||
|
|
873c757606 | ||
|
|
8f520f9a6a | ||
|
|
0a86d2bbea | ||
|
|
34437f1b5c | ||
|
|
6ee787bfb7 | ||
|
|
8b1d2b56f3 | ||
|
|
73490b6c64 | ||
|
|
164104919b | ||
|
|
d9a86966d4 | ||
|
|
1adb4b2a0a | ||
|
|
252ddd4c50 | ||
|
|
7a60f6838d | ||
|
|
1085389039 | ||
|
|
a1f4478305 | ||
|
|
aca8b31d1f | ||
|
|
3b1e69f2a5 | ||
|
|
f23f127d3b | ||
|
|
1f9295dead | ||
|
|
c15613d7fe | ||
|
|
4ef5a95b4f | ||
|
|
e43ef0acf0 | ||
|
|
a0698ed888 | ||
|
|
25380c0618 | ||
|
|
bef5e8479f | ||
|
|
d478c92fc8 | ||
|
|
334409ffa8 | ||
|
|
fdcaeee8ee | ||
|
|
dbf2d23905 | ||
|
|
9cc1607811 | ||
|
|
7e2ffc575f | ||
|
|
60c272acb7 | ||
|
|
fe83a62615 | ||
|
|
4dd962f002 | ||
|
|
5c58f2a9c2 | ||
|
|
5e9aaecf9c | ||
|
|
7d23cfc7eb | ||
|
|
0af736df0e | ||
|
|
8edea468e9 | ||
|
|
2aa3317a9b | ||
|
|
3671bbbc78 | ||
|
|
d3dc955987 | ||
|
|
f0c1a855a1 | ||
|
|
86cb967d70 | ||
|
|
f055b73b71 | ||
|
|
825a90a5ad | ||
|
|
79edb94adb | ||
|
|
b72d572594 | ||
|
|
7c08d2d517 | ||
|
|
d12d20e9a0 | ||
|
|
2dec5af7f4 | ||
|
|
714fdfa054 | ||
|
|
0004f0a6d3 | ||
|
|
5d20a7ad15 | ||
|
|
4fbc2fd8ce | ||
|
|
3e90502630 | ||
|
|
c4ee38c0c9 | ||
|
|
b8a1af15ef | ||
|
|
7ecd29bb5d | ||
|
|
b3b94f63d9 | ||
|
|
c0b36ca8d3 | ||
|
|
77b194b680 | ||
|
|
6fafbeb7c3 | ||
|
|
6f2ac1684a | ||
|
|
1227c87d05 | ||
|
|
89b04ff0c5 | ||
|
|
47079cf27f | ||
|
|
fbf223f8bf | ||
|
|
b74fbb828f | ||
|
|
2e34f7435a | ||
|
|
3805d75dba | ||
|
|
b178d68338 | ||
|
|
37c900ea4a | ||
|
|
0cb0c10dbb | ||
|
|
dfb0b532b9 | ||
|
|
e0bd1d4e86 | ||
|
|
683a980858 | ||
|
|
2befe94f5d | ||
|
|
2f65614fcb | ||
|
|
2722dfa793 | ||
|
|
41d6afc336 | ||
|
|
2901dbb5c7 | ||
|
|
37122cd76c | ||
|
|
7173564ea9 | ||
|
|
be402b1b5c | ||
|
|
f187e75fff | ||
|
|
c6df846bde | ||
|
|
52c2611e9d | ||
|
|
5c87694b87 | ||
|
|
94f5314649 | ||
|
|
32042ff2cc | ||
|
|
9ce13cd1d2 | ||
|
|
b4e2f2418e | ||
|
|
5563e3c084 | ||
|
|
77a8a2c0d6 | ||
|
|
010179742c | ||
|
|
f2bbaed317 | ||
|
|
8c56f21f16 | ||
|
|
eb627bdedc | ||
|
|
291c033e34 | ||
|
|
1f389b3faa | ||
|
|
3d3ddaa7c4 | ||
|
|
4ea2097429 | ||
|
|
cfaba462d5 | ||
|
|
5e2f1cca57 | ||
|
|
b2e2a4c781 | ||
|
|
318b8495b7 | ||
|
|
5e1d5d2937 | ||
|
|
0b6df3bd28 | ||
|
|
af1666b3ba | ||
|
|
31a8c756e2 | ||
|
|
ce39c98396 | ||
|
|
faf156a6b2 | ||
|
|
1b36b9e7df | ||
|
|
652a44437e | ||
|
|
76141e70ce | ||
|
|
76b4f6ac9a | ||
|
|
953d7480af | ||
|
|
f323278f00 | ||
|
|
56a6f22bf6 | ||
|
|
b9d3cc3c4e | ||
|
|
d4833071df | ||
|
|
877d308574 | ||
|
|
83b662eac3 | ||
|
|
53a996edbc | ||
|
|
398deb5382 | ||
|
|
b5991a5f50 | ||
|
|
de92627176 | ||
|
|
6be028b9dc | ||
|
|
8997c38263 | ||
|
|
d927e40867 | ||
|
|
62c0dbddb2 | ||
|
|
e68a8a1af0 | ||
|
|
68e8aa0512 | ||
|
|
b792128415 | ||
|
|
f5d9f589bf | ||
|
|
3e5b28f208 | ||
|
|
3b4209223e | ||
|
|
6fc7cce79a | ||
|
|
fd4a1cd0c7 | ||
|
|
2deaed1adc | ||
|
|
55a61d4d10 | ||
|
|
3a4652543f | ||
|
|
9b4dd77943 | ||
|
|
91a690f1c8 | ||
|
|
5f498f9ce2 | ||
|
|
195ac47542 | ||
|
|
a25be917ee | ||
|
|
079361b190 | ||
|
|
a314d2b307 | ||
|
|
0340522f59 | ||
|
|
2edd597871 | ||
|
|
5f4f97c360 | ||
|
|
17ae8b4a1d | ||
|
|
bb9765e011 | ||
|
|
5bfc47775b | ||
|
|
216508170f | ||
|
|
0faa135978 | ||
|
|
9ba61cce28 | ||
|
|
9824a3f659 | ||
|
|
4115584306 | ||
|
|
cd239ac6ae | ||
|
|
030844f2fb | ||
|
|
2e6dd7de23 | ||
|
|
de5707ff06 | ||
|
|
371c5c3502 |
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: 🐛 Bug Report
|
||||
description: Report a reproducible bug in the current release of NetBox
|
||||
labels: ["type: bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**NOTE:** This form is only for reporting _reproducible bugs_. If you're having
|
||||
trouble with installation or just looking for assistance with using NetBox
|
||||
Topology Views, please visit our
|
||||
[discussion forum](https://github.com/mattieserver/netbox-topology-views/discussions) instead.
|
||||
- type: input
|
||||
attributes:
|
||||
label: NetBox version
|
||||
description: What version of NetBox are you currently running?
|
||||
placeholder: v3.3.9
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Topology Views version
|
||||
description: What version of NetBox Topology Views are you currently running?
|
||||
placeholder: v3.1.0
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: >
|
||||
Describe in detail the exact steps that someone else can take to
|
||||
reproduce this bug using the current stable release of NetBox Topology Views.
|
||||
placeholder: |
|
||||
1. Click on "create widget"
|
||||
2. Set foo to 12 and bar to G
|
||||
3. Click the "create" button
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: What did you expect to happen?
|
||||
placeholder: A new widget should have been created with the specified attributes
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Observed Behavior
|
||||
description: What happened instead?
|
||||
placeholder: A TypeError exception was raised
|
||||
validations:
|
||||
required: true
|
||||
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: ❓ Discussion
|
||||
url: https://github.com/mattieserver/netbox-topology-views/discussions
|
||||
about: "If you're just looking for help, try starting a discussion instead"
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
name: ✨ Feature Request
|
||||
description: Propose a new NetBox Topology Views feature or enhancement
|
||||
labels: ["type: feature"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**NOTE:** This form is only for submitting well-formed proposals to extend or modify
|
||||
NetBox Topology Views in some way. If you're trying to solve a problem but can't figure
|
||||
out how, or if you still need time to work on the details of a proposed new feature,
|
||||
please start a [discussion](https://github.com/mattieserver/netbox-topology-views/discussions) instead.
|
||||
- type: input
|
||||
attributes:
|
||||
label: NetBox version
|
||||
description: What version of NetBox are you currently running?
|
||||
placeholder: v3.3.9
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Topology Views version
|
||||
description: What version of NetBox Topology Views are you currently running?
|
||||
placeholder: v3.1.0
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Feature type
|
||||
options:
|
||||
- New functionality
|
||||
- Change to existing functionality
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Proposed functionality
|
||||
description: >
|
||||
Describe in detail the new feature or behavior you are proposing. Include any specific changes
|
||||
to work flows and/or the user interface. The more detail you provide here, the
|
||||
greater chance your proposal has of being discussed. Feature requests which don't include an
|
||||
actionable implementation plan will be rejected.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Use case
|
||||
description: >
|
||||
Explain how adding this functionality would benefit NetBox Topology Views users. What need does it address?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: External dependencies
|
||||
description: >
|
||||
List any new dependencies on external libraries or services that this new feature would
|
||||
introduce. For example, does the proposal require the installation of a new Python package?
|
||||
(Not all new features introduce new dependencies.)
|
||||
@@ -0,0 +1,24 @@
|
||||
<!--
|
||||
IMPORTANT:
|
||||
==========
|
||||
Thank you for contributing to NetBox Topology Views! Please
|
||||
note that our contribution guidelines require a feature
|
||||
request or bug report to be labeled "status: accepted". This
|
||||
helps avoid waste time and effort on a proposed change that
|
||||
we might not be able to accept. If a feature request or bug
|
||||
report is labeled "status: needs owner", feel free to raise
|
||||
your hand if you'd like to take work on it and we will
|
||||
happily assign you to the issue.
|
||||
|
||||
Please prefix the title of your pull request according to
|
||||
it's type. You should use "Closes #FEATURE_ID: ..." for feature
|
||||
requests and "Fixes #ISSUE_ID: ..." for issues. This helps
|
||||
us closing issues automatically after merging.
|
||||
|
||||
To sum it up:
|
||||
1. Create Bug Report or Feature Request
|
||||
2. Wait until the issue has been labeled "status: accepted"
|
||||
3. Start working on the issue in a seperate branch
|
||||
3. Create a pull request and name the title with a prefix
|
||||
according to the issue ID.
|
||||
-->
|
||||
@@ -0,0 +1,71 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '16 22 * * 6'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript', 'python' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
@@ -0,0 +1,15 @@
|
||||
name: NetBox plugin manifest modified
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop ]
|
||||
paths:
|
||||
- netbox-plugin.yaml
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
manifest-modified:
|
||||
uses: netboxlabs/public-workflows/.github/workflows/reusable-plugin-manifest-modified.yml@release
|
||||
@@ -5,7 +5,7 @@ name: Upload Python Package
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -13,19 +13,19 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
uses: actions/setup-python@v3
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install setuptools wheel twine
|
||||
- name: Build and publish
|
||||
env:
|
||||
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
||||
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
||||
run: |
|
||||
python setup.py sdist bdist_wheel
|
||||
twine upload dist/*
|
||||
pip install build
|
||||
- name: Build package
|
||||
run: python -m build
|
||||
- name: Publish package
|
||||
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
|
||||
with:
|
||||
user: __token__
|
||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||
|
||||
@@ -128,4 +128,5 @@ dmypy.json
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
node_modules
|
||||
node_modules
|
||||
app.js.map
|
||||
@@ -1,66 +1,216 @@
|
||||
# Netbox Topology Views Plugin
|
||||
|
||||
Create topology views/maps from your devices in netbox.
|
||||
The connections are based on the cables you created in netbox.
|
||||
Support to filter on name, site, tag and device role.
|
||||
 
|
||||
|
||||
Create topology views/maps from your devices in NetBox.
|
||||
The connections are based on the cables you created in NetBox.
|
||||
Support to filter on name, site, tag and device role.
|
||||
Options to export to xml (for draw.io/diagrams.net) or png.
|
||||
|
||||
## Preview
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
## Install
|
||||
|
||||
Run `pip install netbox-topology-views` in your virtual env.
|
||||
**_NOTE:_** For Docker please see: [Docker install](https://github.com/netbox-community/netbox-docker/wiki/Using-Netbox-Plugins)
|
||||
|
||||
Add 'netbox_topology_views' to the PLUGINS array in your django configuration file.
|
||||
**_NOTE:_** Add `RUN mkdir -p /opt/netbox/netbox/static/netbox_topology_views/img` to the Dockerfile-Plugins file to create the image folder.
|
||||
|
||||
Then run `python3 manage.py collectstatic --no-input`
|
||||
The plugin is available as a Python package and can be installed with pip.
|
||||
|
||||
### Custom field: coordinates
|
||||
First run `source /opt/netbox/venv/bin/activate` to enter the Python virtual environment.
|
||||
|
||||
There is also support for custom fiels.
|
||||
|
||||
If you create a custom field "coordinates" for "dcim > device" with type "text" and name "coordinates" you will see the same layout every time.
|
||||
|
||||
The coordinates can then be provided as: "X;Y"
|
||||
|
||||
## Configure
|
||||
|
||||
If you want to override the default values configure the `PLUGINS_CONFIG` in your `netbox configuration.py`.
|
||||
|
||||
Example:
|
||||
```
|
||||
PLUGINS_CONFIG = {
|
||||
'netbox_topology_views': {
|
||||
'device_img': 'router,switch,firewall',
|
||||
'preselected_device_roles': 'Router, Firewall'
|
||||
}
|
||||
}
|
||||
Then run:
|
||||
```bash
|
||||
cd /opt/netbox/netbox
|
||||
pip3 install netbox-topology-views
|
||||
python3 manage.py migrate netbox_topology_views
|
||||
python3 manage.py collectstatic --no-input
|
||||
```
|
||||
|
||||
| Setting | Default value | Description |
|
||||
| ------------- |-------------| -----|
|
||||
| device_img | 'access-switch,core-switch,firewall,router,distribution-switch,backup,storage,wan-network,wireless-ap,server,internal-switch,isp-cpe-material,non-racked-devices,power-units' | The slug of the device roles that you have a image for. |
|
||||
| preselected_device_roles | 'Firewall,Router,Distribution Switch,Core Switch,Internal Switch,Access Switch,Server,Storage,Backup,Wireless AP' | The full name of the device roles you want to pre select in the global view. Note that this is case sensitive|
|
||||
| allow_coordinates_saving | False | (bool) Set to true if you use the custom coordinates fields and want to save the coordinates |
|
||||
| ignore_cable_type | 'power outlet,power port' | The cable types that you want to ignore in the views |
|
||||
| preselected_tags | '' | The name of tags you want to preload |
|
||||
| enable_circuit_terminations | False | (bool) Set to true if you want to see circuit terminations in the topology |
|
||||
To ensure NetBox Topology Views plugin is automatically re-installed during future upgrades, create a file named `local_requirements.txt` (if not already existing) in the NetBox root directory (alongside `requirements.txt`) and list the `netbox-topology-views` package:
|
||||
|
||||
### Custom Images
|
||||
```no-highlight
|
||||
echo netbox-topology-views >> local_requirements.txt
|
||||
```
|
||||
|
||||
You upload you own custom images to the netbox static dir (`static/netbox_topology_views/img/`).
|
||||
These images need to be named after de device role slug and have the .png format/extension.
|
||||
If you add your own image you also need to add the slug to the `device_img` setting.
|
||||
Once installed, the plugin needs to be enabled in your `configuration.py`:
|
||||
|
||||
## Use
|
||||
```python
|
||||
PLUGINS = ["netbox_topology_views"]
|
||||
```
|
||||
|
||||
Finally, restart NetBox:
|
||||
```no-highlight
|
||||
systemctl restart netbox
|
||||
```
|
||||
|
||||
### Versions
|
||||
|
||||
> [!NOTE]
|
||||
> If the version of netbox is not listed here the plugin will most likely not work. Remove the plugin if you want to update netbox before this plugin has released an update for that netbox version.
|
||||
|
||||
| netbox version | netbox-topology-views version |
|
||||
| -------------- | ----------------------------- |
|
||||
| = 4.3.X | = v4.2.1 |
|
||||
| = 4.2.1 | = v4.2.1 |
|
||||
| = 4.2.0 | = v4.2.0 |
|
||||
| = 4.1.X | = v4.1.0 |
|
||||
| = 4.0.X | = v4.0.0 |
|
||||
| = 3.7.0 | = v3.9.0 |
|
||||
| = 3.6.4 | = v3.8.1 |
|
||||
| = 3.6.0 | = v3.7.0 |
|
||||
| = 3.5.0 | = v3.6.2 |
|
||||
|
||||
Go to the plugins tab in the navbar and click topology or go to `$NETBOX_URL/plugins/topology-views/` to view your topologies
|
||||
|
||||
### Update
|
||||
|
||||
Run `pip install netbox-topology-views --upgrade` in your venv.
|
||||
|
||||
Run `python3 manage.py migrate netbox_topology_views`
|
||||
|
||||
Run `python3 manage.py collectstatic --no-input`
|
||||
|
||||
Clear your browser cache.
|
||||
Clear you browser cache.
|
||||
|
||||
## Configure
|
||||
|
||||
### Individual Options
|
||||
|
||||
All individual options can be assigned a default value per user directly in the plugin. The default value can be overridden on the filter page.
|
||||
|
||||

|
||||
|
||||
The remaining options must be configured in the `PLUGINS_CONFIG` section of your `netbox/configuration.py`.
|
||||
|
||||
Example:
|
||||
```
|
||||
PLUGINS_CONFIG = {
|
||||
'netbox_topology_views': {
|
||||
'static_image_directory': 'netbox_topology_views/img',
|
||||
'allow_coordinates_saving': True,
|
||||
'always_save_coordinates': True
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Setting | Default value | Description |
|
||||
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
||||
| static_image_directory | netbox_topology_views/img | (str or pathlib.Path) Specifies the location that images will be loaded from by default. Must be within `STATIC_ROOT` |
|
||||
| allow_coordinates_saving | False | (bool) Set to true if you want to enable the ability to save the coordinates. |
|
||||
| always_save_coordinates | False | (bool) Set if you want to enable the option to save coordinates by default. Setting allow_coordinates_saving to true is mandatory. |
|
||||
|
||||
### Custom field: coordinates
|
||||
|
||||
There is also support for custom fields.
|
||||
|
||||
>**_Note:_** The custom field "coordinates" is deprecated and will be removed in the future. Please use Coordinate Groups instead.
|
||||
|
||||
If you create a custom field "coordinates" for "dcim > device" and "Circuits > circuit" with type "text" and name "coordinates" you will see the same layout every time. It is recommended to set this field to "UI visibility" "Hidden" and let the plugin manage it in the background.
|
||||
|
||||
The coordinates are stored as: "X;Y".
|
||||
|
||||
> Please read the "Configure" chapter to set the `allow_coordinates_saving` option to True.
|
||||
You might also set the `always_save_coordinates` option to True.
|
||||
|
||||
### Convert custom field to Coordinate Groups
|
||||
|
||||
Please note that values stored in the custom field "coordinates" are not being converted to Coordinate Groups automatically. A pragmatic way to do this conversion yourself is as follows:
|
||||
+ Navigate to "Topology" > "Filters".
|
||||
+ Select "Show Unconnected" and "Show Cables".
|
||||
+ Leave all other filter settings alone. We want all entries to be displayed!
|
||||
+ Click "Search" and wait for the results to be displayed
|
||||
+ Select all nodes. This can be done by holding down the Shift key and dragging a frame around all icons with the left mouse button.
|
||||
+ Drag the selection a tiny bit to the side. This causes all coordinates for all devices to be stored in the "default" group.
|
||||
> **_Hint_**: Don't wait too long after clicking an icon in order to drag. If you hold the mouse button for too long before dragging starts, the selection is reset._
|
||||
+ Storing the values might take some time, depending on the number of devices. Please be patient and check "Coordinates" in order to make sure that everthing has been stored.
|
||||
+ It is save to delete the custom field now.
|
||||
|
||||
### Custom Images
|
||||
|
||||
To change image with associated device use the `Images` page - it allows to map a device role with an image found in the NetBox static directory (defined by the plugin config `static_image_directory` which defaults to `netbox_topology_views/img`). You can also upload you own custom images to there - these images will automatically be used for a device (if it does not already have a specified image in the settings) if their name is the device role slug.
|
||||
|
||||

|
||||
|
||||
## Use
|
||||
|
||||
Go to the plugins tab in the navbar and click topology or go to `$NETBOX_URL/plugins/netbox_topology_views/` to view your topologies
|
||||
|
||||
Select your options for the topology view:
|
||||
|
||||

|
||||
|
||||
<dl>
|
||||
<dt>Coordinate Group</dt>
|
||||
<dd>Select Coordinate Group. These groups allow devices to be displayed in different positions depending on the group, thus providing different representations for the same topology. If nothing is selected, the group "default" is set automatically.</dd>
|
||||
<dt>Save Coordinates</dt>
|
||||
<dd>Save the coordinates of devices in the topology view.</dd>
|
||||
<dt>Show Unconnected</dt>
|
||||
<dd>Show devices that have no connections or for which no connection is displayed. This option depends on other parameters like 'Show Cables' and 'Show Logical Connections'.</dd>
|
||||
<dt>Show Cables</dt>
|
||||
<dd>Show connections between interfaces, front / rear ports, etc., that are connected with one or more cables. These connections are displayed as solid lines in the color of the cable.</dd>
|
||||
<dt>Show Logical Connections</dt>
|
||||
<dd>Show logical connections between interfaces (referred to as Interface Connections in NetBox) in the topology view. Where the path between
|
||||
interfaces includes multiple cables (e.g., via patch panels), only the end interface connections are shown, not the
|
||||
intermediate front / rear port connections, etc. This is similar to what was referred to as 'end-to-end' connections in previous versions. These connections are displayed as yellow dotted lines.</dd>
|
||||
<dt>Show redundant Cable and Logical Connection</dt>
|
||||
<dd>Shows a logical connection (in addition to a cable), even if a cable is directly connected. Leaving this option disabled prevents that redundant display. This option only has an effect if 'Show Logical Connections' is activated.</dd>
|
||||
<dt>Show Neighbors</dt>
|
||||
<dd>Adds neighbors to the filter result set automatically. Link peers will be added if 'Show Cables' is ticked, far-end terminations will be added if 'Show Logical Connections' is ticked.</dd>
|
||||
<dt>Show Circuit Terminations</dt>
|
||||
<dd>Show connections which end at a circuit termination in the topology view. These connections are displayed as blue dashed lines.</dd>
|
||||
<dt>Show Power Feeds</dt>
|
||||
<dd>Displays connections between power outlets and power ports. These connections are displayed as solid lines in the color of the cable. This option depends on 'Show Cables'.</dd>
|
||||
<dt>Show Wireless Links</dt>
|
||||
<dd>Displays wireless connections. These connections are displayed as blue dotted lines.</dd>
|
||||
</dl>
|
||||
|
||||
### Coordinates and Coordinate Groups
|
||||
|
||||
Netbox Topology Views stores the position of the devices. In order to allow different representations for the topology, Coordinate Groups are supported.
|
||||
|
||||
> Please read the "Configure" chapter to set the `allow_coordinates_saving` option to True.
|
||||
You might also set the `always_save_coordinates` option to True.
|
||||
|
||||
Navigate to "Coordinate Groups" in the menu and create as many groups as you like. You can select a group later in the filter pane in order to show icon positions according to this group (see chapter "Use"). You can also omit creating a group if you don't need this feature. Netbox Topology Views automatically creates a group named "default" for you and stores all coordinates in this group, even if you do not select a group in the filter.
|
||||
|
||||
By default, the position of the devices are calculated with a physics engine. As soon as a device icon is dragged to another location, its position is saved and excluded from the calculation by the physics engine. All saved coordinates can be viewed and edited under the menu item "Coordinates".
|
||||
|
||||
> **_Note:_** At the time of writing, it is not possible to store the positions of circuit terminations, power panels and power feeds, as these are not devices.
|
||||
|
||||
### Permissions
|
||||
|
||||
To view `/plugins/netbox_topology-views/topology` you need the following permissions:
|
||||
+ dcim | device | can view device
|
||||
+ dcim | site | can view site
|
||||
+ extras | tag | can view tag
|
||||
+ dcim | device role | can view device role
|
||||
|
||||
To save `Coordinates` when moving icons:
|
||||
+ netbox_topology_views | coordinate | change
|
||||
|
||||
To view `/plugins/netbox_topology-views/images`:
|
||||
+ dcim | site | view
|
||||
+ dcim | device role | view
|
||||
+ dcim | device role | add
|
||||
+ dcim | device role | change
|
||||
|
||||
To view `/plugins/netbox_topology-views/individualoptions`:
|
||||
+ netbox_topology_views | individual options | change
|
||||
|
||||
Set `Coordinate Groups` according to your needs:
|
||||
+ netbox_topology_views | coordinate groups | view/add/change/delete
|
||||
|
||||
Set `Coordinates` according to your needs:
|
||||
+ netbox_topology_views | coordinate | view/add/change/delete
|
||||
|
||||
Set `Power Feed Coordinates` according to your needs:
|
||||
+ netbox_topology_views | power feed coordinate | view/add/change/delete
|
||||
|
||||
Set `Power Panel Coordinates` according to your needs:
|
||||
+ netbox_topology_views | power panel coordinate | view/add/change/delete
|
||||
|
||||
Set `Circuit Coordinates` according to your needs:
|
||||
+ netbox_topology_views | circuit coordinate | view/add/change/delete
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| > 2.0 | :white_check_mark: |
|
||||
| < 2.0 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please create an issue when you encounter a Security issue.
|
||||
@@ -0,0 +1,143 @@
|
||||
# Setup Dev
|
||||
|
||||
We will assume that you work in the folder `~/code/netbox_plugin/`, change this if you use another folder for your projects/code.
|
||||
|
||||
## Setup native prerequisites
|
||||
**_NOTE:_** these requirements are needed if you want install Postgresql & Redis native. Check the steps for docker & docker-compose if you don't want this.
|
||||
|
||||
Make sure that you have already installed Postgresql and Redis. Also make sure that the database has already been created and privileges has been granted as described in the NetBox installation instructions at https://docs.netbox.dev/en/stable/installation/.
|
||||
|
||||
In short:
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt install -y postgresql
|
||||
sudo systemctl start postgresql
|
||||
sudo systemctl enable postgresql
|
||||
|
||||
sudo -u postgres psql
|
||||
CREATE DATABASE netbox;
|
||||
CREATE USER netbox WITH PASSWORD 'J5brHrAXFLQSif0K';
|
||||
GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
|
||||
|
||||
sudo apt install -y redis-server
|
||||
```
|
||||
|
||||
## Setup docker prerequisites
|
||||
|
||||
**_NOTE:_** if you used the 'native' prerequisites you can skip these steps below
|
||||
|
||||
### Docker
|
||||
This depends on your OS or how you want to install docker.
|
||||
See https://docs.docker.com/engine/install/ to find the install steps.
|
||||
|
||||
### Docker compose
|
||||
This also depends on your OS, see the link below:
|
||||
https://docs.docker.com/compose/install/linux/
|
||||
|
||||
## Create the base folder
|
||||
```
|
||||
mkdir ~/code/netbox_plugin/
|
||||
cd ~/code/netbox_plugin/
|
||||
```
|
||||
|
||||
## Install requirements
|
||||
### Python + deps
|
||||
You will need the following packages installed:
|
||||
+ python3-venv
|
||||
+ python3
|
||||
|
||||
Install them with your OS package manager (apt, yum, ...)
|
||||
|
||||
|
||||
### NPM (with nvm)
|
||||
Follow the steps on the repo below to install npm:
|
||||
https://github.com/nvm-sh/nvm#installing-and-updating
|
||||
|
||||
|
||||
## Create venv
|
||||
```
|
||||
python3 -m venv ~/code/netbox_plugin/.venvs/netbox
|
||||
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
|
||||
```
|
||||
|
||||
## Setup netbox
|
||||
### Clone netbox repo
|
||||
```
|
||||
cd ~/code/netbox_plugin/
|
||||
git clone git@github.com:netbox-community/netbox.git netbox
|
||||
```
|
||||
### Install deps
|
||||
```
|
||||
cd netbox
|
||||
python3 -m pip install -r requirements.txt
|
||||
```
|
||||
|
||||
|
||||
## Setup plugin
|
||||
### Clone netbox-topology-views repo
|
||||
```
|
||||
cd ~/code/netbox_plugin/
|
||||
git clone git@github.com:mattieserver/netbox-topology-views.git plugin
|
||||
```
|
||||
### Install deps
|
||||
```
|
||||
python3 -m pip install --upgrade build setuptools wheel
|
||||
```
|
||||
### Copy netbox config file
|
||||
```
|
||||
cd ~/code/netbox_plugin/
|
||||
cp plugin/dev_setup/configuration.py netbox/netbox/netbox/configuration.py
|
||||
```
|
||||
|
||||
## Start netbox
|
||||
### Start docker compose
|
||||
**_NOTE:_** if you used the 'native' prerequisites you can skip to 'Start netbox'
|
||||
```
|
||||
cd ~/code/netbox_plugin/
|
||||
cd plugin/dev_setup
|
||||
docker-compose up -d
|
||||
```
|
||||
### Start netbox
|
||||
```
|
||||
cd ~/code/netbox_plugin/
|
||||
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
|
||||
cd netbox/netbox/
|
||||
python3 manage.py migrate
|
||||
python3 manage.py runserver
|
||||
```
|
||||
You might need to create a superuser if you want to start with an empty database: `python3 manage.py createsuperuser`
|
||||
|
||||
# Build
|
||||
|
||||
## Build the plugin
|
||||
|
||||
```
|
||||
cd ~/code/netbox_plugin/
|
||||
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
|
||||
cd plugin/
|
||||
python3 setup.py develop
|
||||
```
|
||||
|
||||
## Build javascript
|
||||
```
|
||||
cd plugin/netbox_topology_views/static_dev
|
||||
npm install
|
||||
npm run bundle
|
||||
```
|
||||
|
||||
### Test
|
||||
You can now browse to http://localhost:8000.
|
||||
The plugin should be available in the menu.
|
||||
|
||||
# Import demo data
|
||||
If you want to add demo data instead of your own data, there's an official Repository you can use. The following example shows how to add demo data for NetBox v3.4. You have to use the json file according to the version you are working on.
|
||||
|
||||
```
|
||||
~/code/netbox_plugin/
|
||||
git clone git@github.com:netbox-community/netbox-demo-data.git demodata
|
||||
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
|
||||
cd netbox/netbox/
|
||||
python3 manage.py loaddata -v 3 ~/src/netbox-demo-data/netbox-demo-v3.4.json
|
||||
```
|
||||
|
||||
Please note that the demo data adds a superuser with credentials admin/admin.
|
||||
@@ -0,0 +1,40 @@
|
||||
###################################################################
|
||||
# This file serves as a base configuration for testing purposes #
|
||||
# only. It is not intended for production use. #
|
||||
###################################################################
|
||||
|
||||
ALLOWED_HOSTS = ['*']
|
||||
|
||||
DATABASE = {
|
||||
'NAME': 'netbox',
|
||||
'USER': 'netbox',
|
||||
'PASSWORD': 'J5brHrAXFLQSif0K',
|
||||
'HOST': 'localhost',
|
||||
'PORT': '',
|
||||
'CONN_MAX_AGE': 300,
|
||||
}
|
||||
|
||||
DEBUG = True
|
||||
|
||||
PLUGINS = [
|
||||
'netbox_topology_views',
|
||||
]
|
||||
|
||||
REDIS = {
|
||||
'tasks': {
|
||||
'HOST': 'localhost',
|
||||
'PORT': 6379,
|
||||
'PASSWORD': 't4Ph722qJ5QHeQ1qfu36',
|
||||
'DATABASE': 0,
|
||||
'SSL': False,
|
||||
},
|
||||
'caching': {
|
||||
'HOST': 'localhost',
|
||||
'PORT': 6378,
|
||||
'PASSWORD': 'H733Kdjndks81',
|
||||
'DATABASE': 1,
|
||||
'SSL': False,
|
||||
}
|
||||
}
|
||||
|
||||
SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
||||
@@ -0,0 +1,41 @@
|
||||
version: '3.4'
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
POSTGRES_PASSWORD: J5brHrAXFLQSif0K #just for local dev
|
||||
POSTGRES_DB: netbox
|
||||
POSTGRES_USER: netbox
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- netbox-postgres-data-16:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
command:
|
||||
- sh
|
||||
- -c # this is to evaluate the $REDIS_PASSWORD from the env
|
||||
- redis-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
|
||||
environment:
|
||||
REDIS_PASSWORD: t4Ph722qJ5QHeQ1qfu36 #just for local dev
|
||||
volumes:
|
||||
- netbox-redis-data:/data
|
||||
ports:
|
||||
- "6379:6379"
|
||||
redis-cache:
|
||||
image: redis:6-alpine
|
||||
command:
|
||||
- sh
|
||||
- -c # this is to evaluate the $REDIS_PASSWORD from the env
|
||||
- redis-server --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
|
||||
environment:
|
||||
REDIS_PASSWORD: H733Kdjndks81 #just for local dev
|
||||
ports:
|
||||
- "6378:6379"
|
||||
|
||||
volumes:
|
||||
netbox-postgres-data-16:
|
||||
driver: local
|
||||
netbox-redis-data:
|
||||
driver: local
|
||||
|
Before Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 260 KiB |
@@ -1,78 +0,0 @@
|
||||
var gulp = require('gulp');
|
||||
var sass = require('gulp-sass');
|
||||
var concat = require('gulp-concat');
|
||||
var uglify = require('gulp-uglify');
|
||||
var cleanCss = require('gulp-clean-css');
|
||||
|
||||
|
||||
var jsVendorFiles = [
|
||||
'node_modules/vis-network/standalone/umd/vis-network.min.js',
|
||||
];
|
||||
|
||||
var cssVendorFiles = [
|
||||
'node_modules/vis-network/dist/dist/vis-network.min.css',
|
||||
];
|
||||
var sassFiles = './netbox_topology_views/static_dev/css/*.scss',
|
||||
cssDest = './netbox_topology_views/static/netbox_topology_views/css/';
|
||||
|
||||
var jsLocalResourceFiles = './netbox_topology_views/static_dev/js/*.js',
|
||||
jsDest = './netbox_topology_views/static/netbox_topology_views/js/';
|
||||
|
||||
|
||||
function styles_local() {
|
||||
return gulp.src(sassFiles)
|
||||
.pipe(sass().on('error', sass.logError))
|
||||
.pipe(concat('app.css'))
|
||||
.pipe(cleanCss())
|
||||
.pipe(gulp.dest(cssDest));
|
||||
|
||||
}
|
||||
exports.styles_local = styles_local
|
||||
|
||||
function styles_vendor() {
|
||||
return gulp.src(cssVendorFiles)
|
||||
.pipe(concat('vendor.css'))
|
||||
.pipe(cleanCss())
|
||||
.pipe(gulp.dest(cssDest))
|
||||
}
|
||||
exports.styles_vendor = styles_vendor
|
||||
|
||||
function js_local() {
|
||||
return gulp.src(jsLocalResourceFiles)
|
||||
.pipe(concat('app.js'))
|
||||
.pipe(uglify())
|
||||
.pipe(gulp.dest(jsDest))
|
||||
}
|
||||
exports.js_local = js_local
|
||||
|
||||
function js_vendor() {
|
||||
return gulp.src(jsVendorFiles)
|
||||
.pipe(concat('vendor.js'))
|
||||
.pipe(uglify())
|
||||
.pipe(gulp.dest(jsDest))
|
||||
|
||||
}
|
||||
exports.js_vendor = js_vendor
|
||||
|
||||
function js_local_dev() {
|
||||
return gulp.src(jsLocalResourceFiles)
|
||||
.pipe(concat('app.js'))
|
||||
.pipe(gulp.dest(jsDest))
|
||||
}
|
||||
exports.js_local_dev = js_local_dev
|
||||
|
||||
function js_vendor_dev() {
|
||||
return gulp.src(jsVendorFiles)
|
||||
.pipe(concat('vendor.js'))
|
||||
.pipe(gulp.dest(jsDest))
|
||||
|
||||
}
|
||||
exports.js_vendor_dev = js_vendor_dev
|
||||
|
||||
exports.css = gulp.series(styles_local, styles_vendor);
|
||||
|
||||
exports.js = gulp.series(js_local, js_vendor);
|
||||
exports.js_dev = gulp.series(js_local_dev, js_vendor_dev);
|
||||
|
||||
exports.build = gulp.series(exports.css, exports.js);
|
||||
exports.build_dev = gulp.series(exports.css, exports.js_dev);
|
||||
@@ -0,0 +1,27 @@
|
||||
version: 0.1
|
||||
package_name: netbox-topology-views
|
||||
compatibility:
|
||||
- release: 4.2.0
|
||||
netbox_min: 4.2.0
|
||||
netbox_max: 4.2.1
|
||||
- release: 4.1.0
|
||||
netbox_min: 4.1.0
|
||||
netbox_max: 4.1.11
|
||||
- release: 4.0.1
|
||||
netbox_min: 4.0.9
|
||||
netbox_max: 4.0.11
|
||||
- release: 4.0.0
|
||||
netbox_min: 4.0.0
|
||||
netbox_max: 4.0.9
|
||||
- release: 3.9.1
|
||||
netbox_min: 3.7.1
|
||||
netbox_max: 3.7.8
|
||||
- release: 3.9.0
|
||||
netbox_min: 3.7.1
|
||||
netbox_max: 3.7.8
|
||||
- release: 3.8.1
|
||||
netbox_min: 3.6.9
|
||||
netbox_max: 3.6.9
|
||||
- release: 3.6.2
|
||||
netbox_min: 3.5.1
|
||||
netbox_max: 3.5.9
|
||||
@@ -1,21 +1,25 @@
|
||||
from extras.plugins import PluginConfig
|
||||
from netbox.plugins import PluginConfig
|
||||
|
||||
|
||||
class TopologyViewsConfig(PluginConfig):
|
||||
name = 'netbox_topology_views'
|
||||
verbose_name = 'Topology views'
|
||||
description = 'An plugin to render toplogoy maps'
|
||||
version = '0.4.8'
|
||||
author = 'Mattijs Vanhaverbeke'
|
||||
author_email = 'author@example.com'
|
||||
base_url = 'topology-views'
|
||||
name = "netbox_topology_views"
|
||||
verbose_name = "Topology views"
|
||||
description = "An plugin to render topology maps"
|
||||
version = "4.2.1"
|
||||
author = "Mattijs Vanhaverbeke"
|
||||
author_email = "author@example.com"
|
||||
base_url = "netbox_topology_views"
|
||||
required_settings = []
|
||||
default_settings = {
|
||||
'preselected_device_roles': 'Firewall,Router,Distribution Switch,Core Switch,Internal Switch,Access Switch,Server,Storage,Backup,Wireless AP',
|
||||
'ignore_cable_type': 'power outlet,power port',
|
||||
'device_img': 'access-switch,core-switch,firewall,router,distribution-switch,backup,storage,wan-network,wireless-ap,server,internal-switch,isp-cpe-material,non-racked-devices,power-units',
|
||||
'allow_coordinates_saving': False,
|
||||
'preselected_tags' : '',
|
||||
'enable_circuit_terminations': False
|
||||
"static_image_directory": "netbox_topology_views/img",
|
||||
"allow_coordinates_saving": False,
|
||||
"always_save_coordinates": False,
|
||||
}
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
||||
super().ready()
|
||||
|
||||
|
||||
config = TopologyViewsConfig
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from django.contrib import admin
|
||||
|
||||
#no models yet
|
||||
@@ -0,0 +1 @@
|
||||
"""REST API"""
|
||||
@@ -1,24 +1,53 @@
|
||||
from dcim.models import Device, DeviceRole
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
from netbox.api.serializers import NetBoxModelSerializer
|
||||
|
||||
from dcim.models import DeviceRole, Device
|
||||
from extras.models import Tag
|
||||
from netbox_topology_views.models import RoleImage, IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
|
||||
|
||||
class PreDeviceRoleSerializer(ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = DeviceRole
|
||||
fields = ('id', 'name')
|
||||
|
||||
class PreTagSerializer(ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Tag
|
||||
fields = ('id', 'name')
|
||||
|
||||
|
||||
class TopologyDummySerializer(ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Device
|
||||
fields = ('id', 'name')
|
||||
|
||||
fields = ("id", "name")
|
||||
|
||||
|
||||
class RoleImageSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = RoleImage
|
||||
fields = ("role", "image")
|
||||
|
||||
|
||||
class DeviceRoleSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = DeviceRole
|
||||
fields = ("name", "slug", "color", "vm_role", "description")
|
||||
|
||||
class CoordinateGroupSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = CoordinateGroup
|
||||
fields = ("name", "description")
|
||||
|
||||
class CoordinateSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = Coordinate
|
||||
fields = ("x", "y")
|
||||
|
||||
class CircuitCoordinateSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = CircuitCoordinate
|
||||
fields = ("x", "y")
|
||||
|
||||
class PowerPanelCoordinateSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = PowerPanelCoordinate
|
||||
fields = ("x", "y")
|
||||
|
||||
class PowerFeedCoordinateSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = PowerFeedCoordinate
|
||||
fields = ("x", "y")
|
||||
|
||||
class IndividualOptionsSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = IndividualOptions
|
||||
fields = ("ignore_cable_type", "save_coords", "show_unconnected", "show_cables", "show_logical_connections", "show_single_cable_logical_conns", "show_neighbors", "show_circuit", "show_power", "show_wireless", "group_sites", "group_locations", "group_racks", "group_virtualchassis", "draw_default_layout", "straight_cables", "grid_size", "node_label_items")
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
from rest_framework import routers
|
||||
from netbox.api.routers import NetBoxRouter
|
||||
|
||||
from .views import PreSelectDeviceRolesViewSet, SearchViewSet, SaveCoordsViewSet, PreSelectTagsViewSet
|
||||
from netbox_topology_views.api import views
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('preselectdeviceroles', PreSelectDeviceRolesViewSet)
|
||||
router.register('preselecttags', PreSelectTagsViewSet)
|
||||
router.register('search', SearchViewSet, basename='search')
|
||||
router.register('save-coords', SaveCoordsViewSet, basename='save_coords')
|
||||
router = NetBoxRouter()
|
||||
|
||||
urlpatterns = router.urls
|
||||
router.register("save-coords", views.SaveCoordsViewSet)
|
||||
router.register("images", views.SaveRoleImageViewSet)
|
||||
router.register("xml-export", views.ExportTopoToXML, "xml-export")
|
||||
router.register("coordinate-groups", views.CoordinateGroupViewSet)
|
||||
router.register("coordinate", views.CoordinateViewSet)
|
||||
router.register("circuitcoordinate", views.CircuitCoordinateViewSet)
|
||||
router.register("powerpanelcoordinate", views.PowerPanelCoordinateViewSet)
|
||||
router.register("powerfeedcoordinate", views.PowerFeedCoordinateViewSet)
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
||||
@@ -1,256 +1,281 @@
|
||||
from rest_framework.viewsets import ModelViewSet, ViewSet, ReadOnlyModelViewSet, GenericViewSet
|
||||
from typing import Dict
|
||||
import sys
|
||||
|
||||
from netbox.api.viewsets import BaseViewSet, NetBoxModelViewSet
|
||||
|
||||
from circuits.models import Circuit
|
||||
from dcim.models import Device, DeviceRole, PowerFeed, PowerPanel
|
||||
from extras.models import SavedFilter
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.http import HttpResponse, JsonResponse
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from rest_framework.viewsets import ReadOnlyModelViewSet, ViewSet
|
||||
|
||||
from .serializers import PreDeviceRoleSerializer, TopologyDummySerializer, PreTagSerializer
|
||||
from django.conf import settings
|
||||
from netbox_topology_views.api.serializers import (
|
||||
RoleImageSerializer,
|
||||
TopologyDummySerializer,
|
||||
CoordinateGroupSerializer,
|
||||
CoordinateSerializer,
|
||||
CircuitCoordinateSerializer,
|
||||
PowerPanelCoordinateSerializer,
|
||||
PowerFeedCoordinateSerializer,
|
||||
)
|
||||
import netbox_topology_views.models
|
||||
from netbox_topology_views.models import RoleImage, IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
|
||||
from netbox_topology_views.views import get_topology_data
|
||||
from netbox_topology_views.utils import get_image_from_url, export_data_to_xml, get_query_settings
|
||||
from netbox_topology_views.filters import DeviceFilterSet
|
||||
|
||||
from utilities.api import IsAuthenticatedOrLoginNotRequired
|
||||
class SaveCoordsViewSet(BaseViewSet, ReadOnlyModelViewSet):
|
||||
permission_required = 'netbox_topology_views.change_coordinate'
|
||||
|
||||
from dcim.models import DeviceRole, Device, Cable
|
||||
from circuits.models import Circuit
|
||||
from extras.models import Tag, CustomField, CustomFieldValue
|
||||
|
||||
ignore_cable_type_raw = settings.PLUGINS_CONFIG["netbox_topology_views"]["ignore_cable_type"]
|
||||
ignore_cable_type = ignore_cable_type_raw.split(",")
|
||||
|
||||
preselected_device_roles_raw = settings.PLUGINS_CONFIG["netbox_topology_views"]["preselected_device_roles"]
|
||||
preselected_device_roles = preselected_device_roles_raw.split(",")
|
||||
|
||||
preselected_tags_raw = settings.PLUGINS_CONFIG["netbox_topology_views"]["preselected_tags"]
|
||||
preselected_tags = preselected_tags_raw.split(",")
|
||||
|
||||
|
||||
class PreSelectDeviceRolesViewSet(ReadOnlyModelViewSet):
|
||||
queryset = DeviceRole.objects.filter(name__in=preselected_device_roles)
|
||||
serializer_class = PreDeviceRoleSerializer
|
||||
|
||||
class PreSelectTagsViewSet(ReadOnlyModelViewSet):
|
||||
queryset = Tag.objects.filter(name__in=preselected_tags)
|
||||
serializer_class = PreTagSerializer
|
||||
|
||||
class SaveCoordsViewSet(GenericViewSet):
|
||||
queryset = Device.objects.all()
|
||||
queryset = Device.objects.none()
|
||||
serializer_class = TopologyDummySerializer
|
||||
|
||||
@action(detail=False, methods=['post'])
|
||||
@action(detail=False, methods=["patch"])
|
||||
def save_coords(self, request):
|
||||
results = {}
|
||||
if settings.PLUGINS_CONFIG["netbox_topology_views"]["allow_coordinates_saving"]:
|
||||
try:
|
||||
cfCoords = CustomField.objects.get(name='coordinates')
|
||||
except CustomField.DoesNotExist:
|
||||
results["status"] = "coords custom field not created"
|
||||
return Response(status=500)
|
||||
if not settings.PLUGINS_CONFIG["netbox_topology_views"][
|
||||
"allow_coordinates_saving"
|
||||
]:
|
||||
return Response({"status": "not allowed to save coords"}, status=500)
|
||||
|
||||
obj_type = ContentType.objects.get_for_model(Device)
|
||||
device_id: str = request.data.get("node_id", None)
|
||||
x_coord = request.data.get("x", None)
|
||||
y_coord = request.data.get("y", None)
|
||||
group_id = request.data.get("group", "None")
|
||||
|
||||
device_id = None
|
||||
x_coord = None
|
||||
y_coord = None
|
||||
if "node_id" in request.data:
|
||||
if request.data["node_id"]:
|
||||
device_id = request.data["node_id"]
|
||||
if "x" in request.data:
|
||||
if request.data["x"]:
|
||||
x_coord = request.data["x"]
|
||||
if "y" in request.data:
|
||||
if request.data["y"]:
|
||||
y_coord = request.data["y"]
|
||||
actual_device = None
|
||||
if device_id.startswith("c"):
|
||||
device_id = device_id.lstrip("c")
|
||||
actual_device = Circuit.objects.get(id=device_id)
|
||||
model_name = 'CircuitCoordinate'
|
||||
elif device_id.startswith("p"):
|
||||
device_id = device_id.lstrip("p")
|
||||
actual_device = PowerPanel.objects.get(id=device_id)
|
||||
model_name = 'PowerPanelCoordinate'
|
||||
elif device_id.startswith("f"):
|
||||
device_id = device_id.lstrip("f")
|
||||
actual_device = PowerFeed.objects.get(id=device_id)
|
||||
model_name = 'PowerFeedCoordinate'
|
||||
elif device_id.isnumeric():
|
||||
actual_device = Device.objects.get(id=device_id)
|
||||
model_name = 'Coordinate'
|
||||
|
||||
actual_device= Device.objects.get(id=device_id)
|
||||
try:
|
||||
cfvCoords = CustomFieldValue.objects.get(obj_type=obj_type, obj_id=actual_device.pk, field__name='coordinates')
|
||||
cfvCoords.value = "%s;%s" % (x_coord,y_coord)
|
||||
cfvCoords.save()
|
||||
results["status"] = "coords set"
|
||||
except CustomFieldValue.DoesNotExist:
|
||||
cfvCoords = CustomFieldValue(field=cfCoords, obj_type=obj_type, obj_id=actual_device.id)
|
||||
cfvCoords.value = "%s;%s" % (x_coord,y_coord)
|
||||
cfvCoords.save()
|
||||
results["status"] = "coords set for first time"
|
||||
|
||||
return Response(results)
|
||||
else:
|
||||
results["status"] = "not allowed to save coords"
|
||||
return Response(results, status=500)
|
||||
if not actual_device:
|
||||
return Response({"status": "invalid node_id in body"}, status=400)
|
||||
|
||||
class SearchViewSet(GenericViewSet):
|
||||
#_ignore_model_permissions = True
|
||||
#permission_classes = [IsAuthenticatedOrLoginNotRequired]
|
||||
model_class = getattr(netbox_topology_views.models, model_name)
|
||||
|
||||
queryset = Device.objects.all()
|
||||
if group_id is None or group_id == "default":
|
||||
group_id = model_class.get_or_create_default_group(group_id)
|
||||
if not group_id:
|
||||
return Response(
|
||||
{"status": "Error while creating default group."}, status=500
|
||||
)
|
||||
|
||||
try:
|
||||
if CoordinateGroup.objects.filter(pk=group_id):
|
||||
group = CoordinateGroup.objects.get(pk=group_id)
|
||||
# Hen-and-egg-problem. Thanks, Django! By default, Django updates records that
|
||||
# already exist and inserts otherwise. This does not work with our
|
||||
# unique_together key if no pk is given. But: No record, no pk.
|
||||
if not model_class.objects.filter(group=group, device=actual_device):
|
||||
# Unique group/device pair does not exist. Prepare new data set
|
||||
coords = model_class(group=group, device=actual_device, x=x_coord, y=y_coord)
|
||||
else:
|
||||
# Unique group/device pair already exists. Update data
|
||||
coords = model_class(pk=model_class.objects.get(group=group, device=actual_device).pk, group=group, device=actual_device, x=x_coord, y=y_coord)
|
||||
coords.save()
|
||||
except:
|
||||
return Response(
|
||||
{"status": "Coordinates could not be saved."}, status=500
|
||||
)
|
||||
|
||||
return Response({"status": "saved coords"})
|
||||
|
||||
class ExportTopoToXML(BaseViewSet, ViewSet):
|
||||
queryset = Device.objects.none()
|
||||
serializer_class = TopologyDummySerializer
|
||||
|
||||
def _filter(self, site, role, name, tags):
|
||||
filter_devices = Device.objects.all()
|
||||
if name is not None:
|
||||
filter_devices = filter_devices.filter(name__contains=name)
|
||||
if site is not None:
|
||||
filter_devices = filter_devices.filter(site__id__in=site)
|
||||
if role is not None:
|
||||
filter_devices = filter_devices.filter(device_role__id__in=role)
|
||||
if tags is not None:
|
||||
filter_devices = filter_devices.filter(tags__id__in=tags)
|
||||
return filter_devices
|
||||
def list(self, request):
|
||||
|
||||
self.filterset = DeviceFilterSet
|
||||
self.queryset = Device.objects.restrict(request.user, 'view').select_related(
|
||||
"device_type", "role"
|
||||
)
|
||||
self.queryset = self.filterset(request.GET, self.queryset).qs
|
||||
|
||||
@action(detail=False, methods=['post'])
|
||||
def search(self, request):
|
||||
name = None
|
||||
sites = None
|
||||
devicerole = None
|
||||
tags = None
|
||||
if "devicerole" in request.data:
|
||||
if request.data["devicerole"]:
|
||||
devicerole = request.data["devicerole"]
|
||||
if "sites" in request.data:
|
||||
if request.data["sites"]:
|
||||
sites = request.data["sites"]
|
||||
if "name" in request.data:
|
||||
if request.data["name"]:
|
||||
name = request.data["name"]
|
||||
if "tags" in request.data:
|
||||
if request.data["tags"]:
|
||||
tags = request.data["tags"]
|
||||
individualOptions, created = IndividualOptions.objects.get_or_create(
|
||||
user_id=request.user.id,
|
||||
)
|
||||
|
||||
devices = self._filter(sites, devicerole, name, tags)
|
||||
if request.GET:
|
||||
|
||||
nodes = []
|
||||
edges = []
|
||||
edge_ids = 0
|
||||
cable_ids = []
|
||||
circuit_ids = []
|
||||
for device in devices:
|
||||
cables = device.get_cables()
|
||||
for cable in cables:
|
||||
if cable.termination_a_type.name != "circuit termination" and cable.termination_b_type.name != "circuit termination":
|
||||
if cable.id not in cable_ids:
|
||||
if cable.termination_a_type.name not in ignore_cable_type and cable.termination_b_type.name not in ignore_cable_type:
|
||||
cable_ids.append(cable.id)
|
||||
edge_ids += 1
|
||||
filter_id, ignore_cable_type, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, group_virtualchassis, group, show_neighbors, straight_cables, grid_size, node_label_items = get_query_settings(request)
|
||||
|
||||
cable_a_dev_name = cable.termination_a.device.name
|
||||
if cable_a_dev_name is None:
|
||||
cable_a_dev_name = "device A name unknown"
|
||||
cable_a_name = cable.termination_a.name
|
||||
if cable_a_name is None:
|
||||
cable_a_name = "cable A name unknown"
|
||||
cable_b_dev_name = cable.termination_b.device.name
|
||||
if cable_b_dev_name is None:
|
||||
cable_b_dev_name = "device B name unknown"
|
||||
cable_b_name = cable.termination_b.name
|
||||
if cable_b_name is None:
|
||||
cable_b_name = "cable B name unknown"
|
||||
# Read options from saved filters as NetBox does not handle custom plugin filters
|
||||
if "filter_id" in request.GET and request.GET["filter_id"] != '':
|
||||
try:
|
||||
saved_filter = SavedFilter.objects.get(pk=filter_id)
|
||||
saved_filter_params = getattr(saved_filter, 'parameters')
|
||||
|
||||
edge = {}
|
||||
edge["id"] = edge_ids
|
||||
edge["from"] = cable.termination_a.device.id
|
||||
edge["to"] = cable.termination_b.device.id
|
||||
edge["title"] = "Cable between <br> " + cable_a_dev_name + " [" + cable_a_name + "]<br>" + cable_b_dev_name + " [" + cable_b_name + "]"
|
||||
if cable.color != "":
|
||||
edge["color"] = "#" + cable.color
|
||||
edges.append(edge)
|
||||
if ignore_cable_type == () and 'ignore_cable_type' in saved_filter_params: ignore_cable_type = saved_filter_params['ignore_cable_type']
|
||||
if save_coords == False and 'save_coords' in saved_filter_params: save_coords = saved_filter_params['save_coords']
|
||||
if show_unconnected == False and 'show_unconnected' in saved_filter_params: show_unconnected = saved_filter_params['show_unconnected']
|
||||
if show_power == False and 'show_power' in saved_filter_params: show_power = saved_filter_params['show_power']
|
||||
if show_circuit == False and 'show_circuit' in saved_filter_params: show_circuit = saved_filter_params['show_circuit']
|
||||
if show_logical_connections == False and 'show_logical_connections' in saved_filter_params: show_logical_connections = saved_filter_params['show_logical_connections']
|
||||
if show_single_cable_logical_conns == False and 'show_single_cable_logical_conns' in saved_filter_params: show_single_cable_logical_conns = saved_filter_params['show_single_cable_logical_conns']
|
||||
if show_cables == False and 'show_cables' in saved_filter_params: show_cables = saved_filter_params['show_cables']
|
||||
if show_wireless == False and 'show_wireless' in saved_filter_params: show_wireless = saved_filter_params['show_wireless']
|
||||
if group_sites == False and 'group_sites' in saved_filter_params: group_sites = saved_filter_params['group_sites']
|
||||
if group_locations == False and 'group_locations' in saved_filter_params: group_locations = saved_filter_params['group_locations']
|
||||
if group_racks == False and 'group_racks' in saved_filter_params: group_racks = saved_filter_params['group_racks']
|
||||
if group_virtualchassis == False and 'group_virtualchassis' in saved_filter_params: group_virtualchassis = saved_filter_params['group_virtualchassis']
|
||||
if show_neighbors == False and 'show_neighbors' in saved_filter_params: show_neighbors = saved_filter_params['show_neighbors']
|
||||
if straight_cables == False and 'straight_cables' in saved_filter_params: show_neighbors = saved_filter_params['straight_cables']
|
||||
if grid_size == 0 and 'grid_size' in saved_filter_params: grid_size = saved_filter_params['grid_size']
|
||||
if node_label_items == () and 'node_label_items' in saved_filter_params: node_label_items = saved_filter_params['node_label_items']
|
||||
except SavedFilter.DoesNotExist: # filter_id not found
|
||||
pass
|
||||
except Exception as inst:
|
||||
print(type(inst))
|
||||
|
||||
if 'group' not in request.query_params:
|
||||
if 'saved_filter_params' in locals() and "group" in saved_filter_params:
|
||||
group_id = saved_filter_params['group'][0]
|
||||
else:
|
||||
if cable.termination_a_type.name == "circuit termination":
|
||||
if settings.PLUGINS_CONFIG["netbox_topology_views"]["enable_circuit_terminations"]:
|
||||
if cable.termination_a.circuit.id not in circuit_ids:
|
||||
circuit_ids.append(cable.termination_a.circuit.id)
|
||||
edge_ids += 1
|
||||
|
||||
cable_b_dev_name = cable.termination_b.device.name
|
||||
if cable_b_dev_name is None:
|
||||
cable_b_dev_name = "device B name unknown"
|
||||
cable_b_name = cable.termination_b.name
|
||||
if cable_b_name is None:
|
||||
cable_b_name = "cable B name unknown"
|
||||
|
||||
edge = {}
|
||||
edge["id"] = edge_ids
|
||||
edge["to"] = cable.termination_b.device.id
|
||||
edge["dashes"] = True
|
||||
title = ""
|
||||
|
||||
title += "Circuit provider: " + cable.termination_a.circuit.provider.name + "<br>"
|
||||
title += "Termination between <br>"
|
||||
title += cable_b_dev_name + " [" + cable_b_name + "]<br>"
|
||||
# To Many if's
|
||||
if cable.termination_a.circuit.termination_a is not None:
|
||||
if cable.termination_a.circuit.termination_a.cable is not None:
|
||||
if cable.termination_a.circuit.termination_a.cable.id != cable.id:
|
||||
if cable.termination_a.circuit.termination_a.cable.termination_b is not None:
|
||||
if cable.termination_a.circuit.termination_a.cable.termination_b.device is not None:
|
||||
edge["from"] = cable.termination_a.circuit.termination_a.cable.termination_b.device.id
|
||||
|
||||
cable_a_dev_name = cable.termination_a.circuit.termination_a.cable.termination_b.device.name
|
||||
if cable_a_dev_name is None:
|
||||
cable_a_dev_name = "device B name unknown"
|
||||
cable_b_name = cable.termination_a.circuit.termination_a.cable.termination_b.name
|
||||
if cable_a_name is None:
|
||||
cable_a_name = "cable B name unknown"
|
||||
title += cable_a_dev_name + " [" + cable_a_name + "]<br>"
|
||||
edge["title"] = title
|
||||
edges.append(edge)
|
||||
# To Many if's
|
||||
if cable.termination_a.circuit.termination_z is not None:
|
||||
if cable.termination_a.circuit.termination_z.cable is not None:
|
||||
if cable.termination_a.circuit.termination_z.cable.id != cable.id:
|
||||
if cable.termination_a.circuit.termination_z.cable.termination_b is not None:
|
||||
if cable.termination_a.circuit.termination_z.cable.termination_b.device is not None:
|
||||
edge["from"] = cable.termination_a.circuit.termination_z.cable.termination_b.device.id
|
||||
|
||||
cable_a_dev_name = cable.termination_a.circuit.termination_z.cable.termination_b.device.name
|
||||
if cable_a_dev_name is None:
|
||||
cable_a_dev_name = "device B name unknown"
|
||||
cable_a_name = cable.termination_a.circuit.termination_z.cable.termination_b.name
|
||||
if cable_a_name is None:
|
||||
cable_a_name = "cable B name unknown"
|
||||
title += cable_a_dev_name + " [" + cable_a_name + "]<br>"
|
||||
edge["title"] = title
|
||||
edges.append(edge)
|
||||
dev_name = device.name
|
||||
if dev_name is None:
|
||||
dev_name = "device name unknown"
|
||||
|
||||
node_content = ""
|
||||
|
||||
if device.device_type.display_name is not None:
|
||||
node_content += "<tr><th>Type: </th><td>" + device.device_type.display_name + "</td></tr>"
|
||||
if device.device_role.name is not None:
|
||||
node_content += "<tr><th>Role: </th><td>" + device.device_role.name + "</td></tr>"
|
||||
if device.serial != "":
|
||||
node_content += "<tr><th>Serial: </th><td>" + device.serial + "</td></tr>"
|
||||
if device.primary_ip is not None:
|
||||
node_content += "<tr><th>IP Address: </th><td>" + str(device.primary_ip.address) + "</td></tr>"
|
||||
|
||||
dev_title = "<table> %s </table>" % (node_content)
|
||||
|
||||
node = {}
|
||||
node["id"] = device.id
|
||||
node["name"] = dev_name
|
||||
node["label"] = dev_name
|
||||
node["title"] = dev_title
|
||||
node["shape"] = 'image'
|
||||
if device.device_role.slug in settings.PLUGINS_CONFIG["netbox_topology_views"]["device_img"]:
|
||||
node["image"] = '../../static/netbox_topology_views/img/' + device.device_role.slug + ".png"
|
||||
group_id = "default"
|
||||
else:
|
||||
node["image"] = "../../static/netbox_topology_views/img/role-unknown.png"
|
||||
group_id = request.query_params["group"]
|
||||
topo_data = get_topology_data(
|
||||
queryset=self.queryset,
|
||||
individualOptions=individualOptions,
|
||||
ignore_cable_type=ignore_cable_type,
|
||||
save_coords=save_coords,
|
||||
show_unconnected=show_unconnected,
|
||||
show_cables=show_cables,
|
||||
show_logical_connections=show_logical_connections,
|
||||
show_single_cable_logical_conns=show_single_cable_logical_conns,
|
||||
show_neighbors=show_neighbors,
|
||||
show_circuit=show_circuit,
|
||||
show_power=show_power,
|
||||
show_wireless=show_wireless,
|
||||
group_sites=group_sites,
|
||||
group_locations=group_locations,
|
||||
group_racks=group_racks,
|
||||
group_virtualchassis=group_virtualchassis,
|
||||
group_id=group_id,
|
||||
straight_cables=straight_cables,
|
||||
grid_size=grid_size,
|
||||
node_label_items=node_label_items,
|
||||
)
|
||||
xml_data = export_data_to_xml(topo_data).decode('utf-8').replace('\n', '
')
|
||||
|
||||
if device.device_role.color != "":
|
||||
node["color.border"] = "#" + device.device_role.color
|
||||
return HttpResponse(xml_data, content_type="application/xml; charset=utf-8")
|
||||
else:
|
||||
return JsonResponse(
|
||||
{"status": "Missing or malformed request parameters"}, status=400
|
||||
)
|
||||
|
||||
for device_custom_field in device.custom_field_values.all():
|
||||
if device_custom_field.field.name == "coordinates":
|
||||
cords = device_custom_field.serialized_value.split(";")
|
||||
node["x"] = int(cords[0])
|
||||
node["y"] = int(cords[1])
|
||||
node["physics"] = False
|
||||
|
||||
nodes.append(node)
|
||||
class SaveRoleImageViewSet(BaseViewSet, ReadOnlyModelViewSet):
|
||||
queryset = DeviceRole.objects.none()
|
||||
serializer_class = RoleImageSerializer
|
||||
permission_required = (
|
||||
"dcim.add_devicerole",
|
||||
"dcim.change_devicerole",
|
||||
)
|
||||
|
||||
results = {}
|
||||
results["nodes"] = nodes
|
||||
results["edges"] = edges
|
||||
@action(detail=False, methods=["post"])
|
||||
def save(self, request):
|
||||
if not isinstance(request.data, dict):
|
||||
return JsonResponse(
|
||||
{"status": "Missing or malformed request body"}, status=400
|
||||
)
|
||||
|
||||
return Response(results)
|
||||
if sys.version_info >= (3,9,0):
|
||||
device_roles = {
|
||||
k: v.removeprefix(settings.STATIC_URL)
|
||||
for k, v in request.data.items()
|
||||
if k.isnumeric()}
|
||||
content_type_ids = {
|
||||
k[2:]: v.removeprefix(settings.STATIC_URL)
|
||||
for k, v in request.data.items()
|
||||
if k.startswith("ct") and k[2:].isnumeric()
|
||||
}
|
||||
else:
|
||||
device_roles = {}
|
||||
for k, v in request.data.items():
|
||||
if k.isdigit() and v.startswith(settings.STATIC_URL):
|
||||
device_roles[k] = v[len(settings.STATIC_URL):]
|
||||
|
||||
content_type_ids = {}
|
||||
for k, v in request.data.items():
|
||||
if k.startswith("ct") and k[2:].isdigit() and v.startswith(settings.STATIC_URL):
|
||||
content_type_ids[k[2:]] = v[len(settings.STATIC_URL):]
|
||||
|
||||
roles: Dict[int, DeviceRole] = DeviceRole.objects.in_bulk(device_roles.keys())
|
||||
content_types: Dict[int, ContentType] = ContentType.objects.in_bulk(
|
||||
content_type_ids.keys()
|
||||
)
|
||||
|
||||
if len(roles) != len(device_roles):
|
||||
difference = set(device_roles) - set(roles.keys())
|
||||
return JsonResponse(
|
||||
{"status": f"Got unknown device role ids: {difference}"},
|
||||
status=400,
|
||||
)
|
||||
|
||||
if len(content_types) != len(content_type_ids):
|
||||
difference = set(content_type_ids) - set(content_types.keys())
|
||||
return JsonResponse(
|
||||
{"status": f"Got unknown content type ids: {difference}"},
|
||||
status=400,
|
||||
)
|
||||
|
||||
if device_roles:
|
||||
device_role_ct = ContentType.objects.get_for_model(DeviceRole)
|
||||
|
||||
for id, url in device_roles.items():
|
||||
RoleImage.objects.update_or_create(
|
||||
{
|
||||
"content_type_id": device_role_ct.pk,
|
||||
"object_id": id,
|
||||
"image": str(get_image_from_url(url)),
|
||||
},
|
||||
object_id=id,
|
||||
)
|
||||
|
||||
for content_type_id, url in content_type_ids.items():
|
||||
RoleImage.objects.update_or_create(
|
||||
{
|
||||
"content_type_id": content_type_id,
|
||||
"image": str(get_image_from_url(url)),
|
||||
},
|
||||
content_type_id=content_type_id,
|
||||
)
|
||||
|
||||
return JsonResponse({"status": "Ok"})
|
||||
|
||||
class CoordinateGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = CoordinateGroup.objects.all()
|
||||
serializer_class = CoordinateGroupSerializer
|
||||
|
||||
class CoordinateViewSet(NetBoxModelViewSet):
|
||||
queryset = Coordinate.objects.all()
|
||||
serializer_class = CoordinateSerializer
|
||||
|
||||
class CircuitCoordinateViewSet(NetBoxModelViewSet):
|
||||
queryset = CircuitCoordinate.objects.all()
|
||||
serializer_class = CircuitCoordinateSerializer
|
||||
|
||||
class PowerPanelCoordinateViewSet(NetBoxModelViewSet):
|
||||
queryset = PowerPanelCoordinate.objects.all()
|
||||
serializer_class = PowerPanelCoordinateSerializer
|
||||
|
||||
class PowerFeedCoordinateViewSet(NetBoxModelViewSet):
|
||||
queryset = PowerFeedCoordinate.objects.all()
|
||||
serializer_class = PowerFeedCoordinateSerializer
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
from utilities.choices import ChoiceSet
|
||||
|
||||
class NodeLabelItems(ChoiceSet):
|
||||
DEVICE_NAME = 'devicename'
|
||||
PRIMARY_IPV4 = 'primaryipv4'
|
||||
PRIMARY_IPV6 = 'primaryipv6'
|
||||
OUT_OF_BAND_IP = 'outofbandip'
|
||||
|
||||
CHOICES = [
|
||||
(DEVICE_NAME, 'Device Name'),
|
||||
(PRIMARY_IPV4, 'Primary IPv4'),
|
||||
(PRIMARY_IPV6, 'Primary IPv6'),
|
||||
(OUT_OF_BAND_IP, 'Out-of-band IP'),
|
||||
]
|
||||
@@ -0,0 +1,254 @@
|
||||
import django_filters
|
||||
from circuits.models import Circuit
|
||||
from dcim.choices import DeviceStatusChoices
|
||||
from dcim.models import Device, DeviceRole, Location, Rack, Region, Site, SiteGroup, Manufacturer, DeviceType, Platform, PowerPanel, PowerFeed
|
||||
from django.db.models import Q
|
||||
from extras.filtersets import LocalConfigContextFilterSet
|
||||
from extras.models import ConfigTemplate
|
||||
from netbox.filtersets import NetBoxModelFilterSet
|
||||
from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
|
||||
from utilities.filters import TreeNodeMultipleChoiceFilter, MultiValueCharFilter, MultiValueMACAddressFilter
|
||||
from netbox_topology_views.models import CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
|
||||
|
||||
class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet, LocalConfigContextFilterSet):
|
||||
q = django_filters.CharFilter(
|
||||
method="search",
|
||||
label="Search",
|
||||
)
|
||||
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name='device_type__manufacturer',
|
||||
queryset=Manufacturer.objects.all(),
|
||||
label="Manufacturer (ID)",
|
||||
)
|
||||
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name='device_type__manufacturer__slug',
|
||||
queryset=Manufacturer.objects.all(),
|
||||
to_field_name='slug',
|
||||
label="Manufacturer (slug)",
|
||||
)
|
||||
device_type_id = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset=DeviceType.objects.all(),
|
||||
label="Device type (ID)",
|
||||
)
|
||||
role_id = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="role_id",
|
||||
queryset=DeviceRole.objects.all(),
|
||||
label="Role (ID)",
|
||||
)
|
||||
platform_id = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset=Platform.objects.all(),
|
||||
label="Platform (ID)",
|
||||
)
|
||||
region_id = TreeNodeMultipleChoiceFilter(
|
||||
queryset=Region.objects.all(),
|
||||
field_name="site__region",
|
||||
lookup_expr="in",
|
||||
label="Region (ID)",
|
||||
)
|
||||
site_group_id = TreeNodeMultipleChoiceFilter(
|
||||
queryset=SiteGroup.objects.all(),
|
||||
field_name="site__group",
|
||||
lookup_expr="in",
|
||||
label="Site Group (ID)",
|
||||
)
|
||||
site_id = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset=Site.objects.all(),
|
||||
label="Site (ID)",
|
||||
)
|
||||
location_id = TreeNodeMultipleChoiceFilter(
|
||||
queryset=Location.objects.all(),
|
||||
field_name="location",
|
||||
lookup_expr="in",
|
||||
label="Location (ID)",
|
||||
)
|
||||
rack_id = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset=Rack.objects.all(),
|
||||
field_name="rack_id",
|
||||
label="Rack (ID)",
|
||||
)
|
||||
status = django_filters.MultipleChoiceFilter(
|
||||
choices=DeviceStatusChoices,
|
||||
null_value=None,
|
||||
)
|
||||
mac_address = MultiValueMACAddressFilter(
|
||||
field_name='interfaces__mac_addresses__mac_address',
|
||||
label="MAC address",
|
||||
)
|
||||
serial = MultiValueCharFilter(
|
||||
lookup_expr='iexact'
|
||||
)
|
||||
console_ports = django_filters.BooleanFilter(
|
||||
method='_console_ports',
|
||||
label="Has console ports",
|
||||
)
|
||||
console_server_ports = django_filters.BooleanFilter(
|
||||
method='_console_server_ports',
|
||||
label="Has console server ports",
|
||||
)
|
||||
power_ports = django_filters.BooleanFilter(
|
||||
method='_power_ports',
|
||||
label="Has power ports",
|
||||
)
|
||||
power_outlets = django_filters.BooleanFilter(
|
||||
method='_power_outlets',
|
||||
label="Has power outlets",
|
||||
)
|
||||
interfaces = django_filters.BooleanFilter(
|
||||
method='_interfaces',
|
||||
label="Has interfaces",
|
||||
)
|
||||
pass_through_ports = django_filters.BooleanFilter(
|
||||
method='_pass_through_ports',
|
||||
label="Has pass-through ports",
|
||||
)
|
||||
config_template_id = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset=ConfigTemplate.objects.all(),
|
||||
label="Config template (ID)",
|
||||
)
|
||||
has_primary_ip = django_filters.BooleanFilter(
|
||||
method='_has_primary_ip',
|
||||
label="Has a primary IP",
|
||||
)
|
||||
has_oob_ip = django_filters.BooleanFilter(
|
||||
method='_has_oob_ip',
|
||||
label="Has an out-of-band IP",
|
||||
)
|
||||
virtual_chassis_member = django_filters.BooleanFilter(
|
||||
method='_virtual_chassis_member',
|
||||
label="Is a virtual chassis member",
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Device
|
||||
fields = ["id", "name", "asset_tag", "airflow"]
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
"""Perform the filtered search."""
|
||||
if not value.strip():
|
||||
return queryset
|
||||
qs_filter = Q(name__icontains=value)
|
||||
return queryset.filter(qs_filter)
|
||||
|
||||
def _console_ports(self, queryset, name, value):
|
||||
return queryset.exclude(consoleports__isnull=value)
|
||||
|
||||
def _console_server_ports(self, queryset, name, value):
|
||||
return queryset.exclude(consoleserverports__isnull=value)
|
||||
|
||||
def _power_ports(self, queryset, name, value):
|
||||
return queryset.exclude(powerports__isnull=value)
|
||||
|
||||
def _power_outlets(self, queryset, name, value):
|
||||
return queryset.exclude(poweroutlets__isnull=value)
|
||||
|
||||
def _interfaces(self, queryset, name, value):
|
||||
return queryset.exclude(interfaces__isnull=value)
|
||||
|
||||
def _pass_through_ports(self, queryset, name, value):
|
||||
return queryset.exclude(
|
||||
frontports__isnull=value,
|
||||
rearports__isnull=value
|
||||
)
|
||||
|
||||
def _has_primary_ip(self, queryset, name, value):
|
||||
params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False)
|
||||
if value:
|
||||
return queryset.filter(params)
|
||||
return queryset.exclude(params)
|
||||
|
||||
def _has_oob_ip(self, queryset, name, value):
|
||||
params = Q(oob_ip__isnull=False)
|
||||
if value:
|
||||
return queryset.filter(params)
|
||||
return queryset.exclude(params)
|
||||
|
||||
def _virtual_chassis_member(self, queryset, name, value):
|
||||
return queryset.exclude(virtual_chassis__isnull=value)
|
||||
|
||||
class CircuitCoordinatesFilterSet(NetBoxModelFilterSet):
|
||||
group = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = CoordinateGroup.objects.all(),
|
||||
)
|
||||
|
||||
device = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = Circuit.objects.all(),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = CircuitCoordinate
|
||||
fields = ['id', 'group', 'device', 'x', 'y']
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
"""Perform the filtered search."""
|
||||
if not value.strip():
|
||||
return queryset
|
||||
return queryset.filter(
|
||||
Q(group__name__icontains=value) |
|
||||
Q(device__name__icontains=value)
|
||||
)
|
||||
|
||||
class PowerPanelCoordinatesFilterSet(NetBoxModelFilterSet):
|
||||
group = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = CoordinateGroup.objects.all(),
|
||||
)
|
||||
|
||||
device = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = PowerPanel.objects.all(),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = PowerPanelCoordinate
|
||||
fields = ['id', 'group', 'device', 'x', 'y']
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
"""Perform the filtered search."""
|
||||
if not value.strip():
|
||||
return queryset
|
||||
return queryset.filter(
|
||||
Q(group__name__icontains=value) |
|
||||
Q(device__name__icontains=value)
|
||||
)
|
||||
|
||||
class PowerFeedCoordinatesFilterSet(NetBoxModelFilterSet):
|
||||
group = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = CoordinateGroup.objects.all(),
|
||||
)
|
||||
|
||||
device = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = PowerFeed.objects.all(),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = PowerFeedCoordinate
|
||||
fields = ['id', 'group', 'device', 'x', 'y']
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
"""Perform the filtered search."""
|
||||
if not value.strip():
|
||||
return queryset
|
||||
return queryset.filter(
|
||||
Q(group__name__icontains=value) |
|
||||
Q(device__name__icontains=value)
|
||||
)
|
||||
|
||||
class CoordinatesFilterSet(NetBoxModelFilterSet):
|
||||
group = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = CoordinateGroup.objects.all(),
|
||||
)
|
||||
|
||||
device = django_filters.ModelMultipleChoiceFilter(
|
||||
queryset = Device.objects.all(),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Coordinate
|
||||
fields = ['id', 'group', 'device', 'x', 'y']
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
"""Perform the filtered search."""
|
||||
if not value.strip():
|
||||
return queryset
|
||||
return queryset.filter(
|
||||
Q(group__name__icontains=value) |
|
||||
Q(device__name__icontains=value)
|
||||
)
|
||||
@@ -0,0 +1,705 @@
|
||||
from cProfile import label
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from circuits.models import Circuit
|
||||
from dcim.models import Device, Site, SiteGroup, Region, DeviceRole, Location, Rack, Manufacturer, DeviceType, Platform, PowerPanel, PowerFeed
|
||||
|
||||
from django import forms
|
||||
from dcim.choices import DeviceStatusChoices, DeviceAirflowChoices
|
||||
from tenancy.models import TenantGroup, Tenant
|
||||
from extras.models import ConfigTemplate
|
||||
from extras.forms import LocalConfigContextFilterForm
|
||||
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
|
||||
from django.conf import settings
|
||||
from netbox.forms import NetBoxModelFilterSetForm, NetBoxModelForm, NetBoxModelImportForm
|
||||
from utilities.forms.rendering import FieldSet
|
||||
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
|
||||
from utilities.forms.fields import (
|
||||
TagFilterField,
|
||||
DynamicModelMultipleChoiceField
|
||||
)
|
||||
|
||||
from netbox_topology_views.models import IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
|
||||
from netbox_topology_views.choices import NodeLabelItems
|
||||
|
||||
class DeviceFilterForm(
|
||||
LocalConfigContextFilterForm,
|
||||
TenancyFilterForm,
|
||||
ContactModelFilterForm,
|
||||
NetBoxModelFilterSetForm
|
||||
):
|
||||
model = Device
|
||||
fieldsets = (
|
||||
FieldSet('q', 'filter_id', 'tag'),
|
||||
FieldSet(
|
||||
'group', 'ignore_cable_type', 'save_coords', 'show_unconnected', 'show_cables', 'show_logical_connections',
|
||||
'show_single_cable_logical_conns', 'show_neighbors', 'show_circuit', 'show_power', 'show_wireless',
|
||||
'group_sites', 'group_locations', 'group_racks', 'group_virtualchassis', 'straight_cables', 'grid_size', 'node_label_items', name=_("Options")
|
||||
),
|
||||
FieldSet('id', name=_("Device")),
|
||||
FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_("Location")),
|
||||
FieldSet('status', 'role_id', 'airflow', 'serial', 'asset_tag', 'mac_address', name=_("Operation")),
|
||||
FieldSet('manufacturer_id', 'device_type_id', 'platform_id', name=_("Hardware")),
|
||||
FieldSet('tenant_group_id', 'tenant_id', name=_("Tenant")),
|
||||
FieldSet('contact', 'contact_role', 'contact_group', name=_("Contacts")),
|
||||
FieldSet(
|
||||
'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports', name=_("Components")
|
||||
),
|
||||
FieldSet(
|
||||
'has_primary_ip', 'has_oob_ip', 'virtual_chassis_member', 'config_template_id', 'local_context_data', name=_("Miscellaneous")
|
||||
),
|
||||
)
|
||||
group = forms.ModelChoiceField(
|
||||
queryset=CoordinateGroup.objects.all(),
|
||||
required=False,
|
||||
label=_('Coordinate group'),
|
||||
)
|
||||
id = DynamicModelMultipleChoiceField(
|
||||
queryset=Device.objects.all(),
|
||||
required=False,
|
||||
label=_('Device'),
|
||||
query_params={
|
||||
'location_id': '$location_id',
|
||||
'region_id': '$region_id',
|
||||
'site_group_id': '$site_group_id',
|
||||
'site_id': '$site_id',
|
||||
'role_id': '$role_id',
|
||||
'contact': '$contact',
|
||||
'contact_role': '$contact_role',
|
||||
'contact_group': '$contact_group',
|
||||
},
|
||||
)
|
||||
region_id = DynamicModelMultipleChoiceField(
|
||||
queryset=Region.objects.all(),
|
||||
required=False,
|
||||
label=_('Region')
|
||||
)
|
||||
site_group_id = DynamicModelMultipleChoiceField(
|
||||
queryset=SiteGroup.objects.all(),
|
||||
required=False,
|
||||
label=_('Site Group'),
|
||||
)
|
||||
site_id = DynamicModelMultipleChoiceField(
|
||||
queryset=Site.objects.all(),
|
||||
required=False,
|
||||
query_params={
|
||||
'region_id': '$region_id',
|
||||
'group_id': '$site_group_id',
|
||||
},
|
||||
label=_('Site'),
|
||||
)
|
||||
location_id = DynamicModelMultipleChoiceField(
|
||||
queryset=Location.objects.all(),
|
||||
required=False,
|
||||
query_params={
|
||||
'region_id': '$region_id',
|
||||
'site_group_id': '$site_group_id',
|
||||
'site_id': '$site_id',
|
||||
},
|
||||
label=_('Location'),
|
||||
)
|
||||
rack_id = DynamicModelMultipleChoiceField(
|
||||
queryset=Rack.objects.all(),
|
||||
required=False,
|
||||
query_params={
|
||||
'region_id': '$region_id',
|
||||
'site_group_id': '$site_group_id',
|
||||
'site_id': '$site_id',
|
||||
'location_id': '$location_id',
|
||||
},
|
||||
label=_('Rack'),
|
||||
)
|
||||
status = forms.MultipleChoiceField(
|
||||
choices=DeviceStatusChoices,
|
||||
required=False,
|
||||
label=_('Device Status')
|
||||
)
|
||||
role_id = DynamicModelMultipleChoiceField(
|
||||
queryset=DeviceRole.objects.all(),
|
||||
required=False,
|
||||
label=_('Role')
|
||||
)
|
||||
airflow = forms.MultipleChoiceField(
|
||||
label=_('Airflow'),
|
||||
choices=add_blank_choice(DeviceAirflowChoices),
|
||||
required=False
|
||||
)
|
||||
serial = forms.CharField(
|
||||
label=_('Serial'),
|
||||
required=False
|
||||
)
|
||||
asset_tag = forms.CharField(
|
||||
label=_('Asset tag'),
|
||||
required=False
|
||||
)
|
||||
mac_address = forms.CharField(
|
||||
required=False,
|
||||
label=_('MAC address')
|
||||
)
|
||||
manufacturer_id = DynamicModelMultipleChoiceField(
|
||||
queryset=Manufacturer.objects.all(),
|
||||
required=False,
|
||||
label=_('Manufacturer')
|
||||
)
|
||||
device_type_id = DynamicModelMultipleChoiceField(
|
||||
queryset=DeviceType.objects.all(),
|
||||
required=False,
|
||||
query_params={
|
||||
'manufacturer_id': '$manufacturer_id'
|
||||
},
|
||||
label=_('Model')
|
||||
)
|
||||
platform_id = DynamicModelMultipleChoiceField(
|
||||
queryset=Platform.objects.all(),
|
||||
required=False,
|
||||
null_option='None',
|
||||
label=_('Platform')
|
||||
)
|
||||
console_ports = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has console ports'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
console_server_ports = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has console server ports'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
power_ports = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has power ports'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
power_outlets = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has power outlets'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
interfaces = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has interfaces'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
pass_through_ports = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has pass-through ports'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
config_template_id = DynamicModelMultipleChoiceField(
|
||||
queryset=ConfigTemplate.objects.all(),
|
||||
required=False,
|
||||
label=_('Config template')
|
||||
)
|
||||
has_primary_ip = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has a primary IP'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
has_oob_ip = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Has an OOB IP'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
virtual_chassis_member = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_('Virtual chassis member'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
|
||||
tag = TagFilterField(model)
|
||||
|
||||
# options
|
||||
ignore_cable_type = forms.MultipleChoiceField(
|
||||
label=_('Ignore Termination Types'),
|
||||
required=False,
|
||||
choices=IndividualOptions.CHOICES
|
||||
)
|
||||
save_coords = forms.NullBooleanField(
|
||||
label=_('Save Coordinates'),
|
||||
required=False,
|
||||
disabled=(not settings.PLUGINS_CONFIG['netbox_topology_views']['allow_coordinates_saving'] or settings.PLUGINS_CONFIG['netbox_topology_views']['always_save_coordinates']),
|
||||
initial=(settings.PLUGINS_CONFIG['netbox_topology_views']['always_save_coordinates']),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
show_unconnected = forms.NullBooleanField(
|
||||
label=_('Show Unconnected'),
|
||||
required=False,
|
||||
initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
|
||||
show_cables = forms.NullBooleanField(
|
||||
required=False,
|
||||
initial=False,
|
||||
label=_('Show Cables'),
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
|
||||
show_logical_connections = forms.NullBooleanField(
|
||||
label =_('Show Logical Connections'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
show_single_cable_logical_conns = forms.NullBooleanField(
|
||||
label =_('Show redundant Cable and Logical Connection'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
show_neighbors = forms.NullBooleanField(
|
||||
label =_('Show Neighbors'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
show_circuit = forms.NullBooleanField(
|
||||
label=_('Show Circuit Terminations'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
show_power = forms.NullBooleanField(
|
||||
label=_('Show Power Feeds'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
show_wireless = forms.NullBooleanField(
|
||||
label =_('Show Wireless Links'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
group_sites = forms.NullBooleanField(
|
||||
label =_('Group Sites'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
group_locations = forms.NullBooleanField(
|
||||
label =_('Group Locations'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
group_racks = forms.NullBooleanField(
|
||||
label =_('Group Racks'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
group_virtualchassis = forms.NullBooleanField(
|
||||
label =_('Group Virtual Chassis'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
straight_cables = forms.BooleanField(
|
||||
label=_('Straight Cables'), required=False, initial=False,
|
||||
widget=forms.Select(
|
||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||
)
|
||||
)
|
||||
grid_size = forms.IntegerField(
|
||||
label=_('Grid Size'),
|
||||
required=False,
|
||||
initial=0,
|
||||
min_value=0,
|
||||
max_value=1000,
|
||||
help_text=_('Show grid and snap dragged icons to grid. Set to 0 to disable grid and snapping.')
|
||||
)
|
||||
node_label_items = forms.MultipleChoiceField(
|
||||
label=_('Node Label Items'),
|
||||
required=False,
|
||||
choices=NodeLabelItems
|
||||
)
|
||||
|
||||
class CoordinateGroupsForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
FieldSet('name', 'description', name=_("Group Details")),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = CoordinateGroup
|
||||
fields = ('name', 'description')
|
||||
|
||||
class CoordinateGroupsImportForm(NetBoxModelImportForm):
|
||||
class Meta:
|
||||
model = CoordinateGroup
|
||||
fields = ('name', 'description')
|
||||
|
||||
class CircuitCoordinatesForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("Circuit Coordinate")),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = CircuitCoordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class PowerPanelCoordinatesForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("Power Panel")),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = PowerPanelCoordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class PowerFeedCoordinatesForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("PowerFeed Coordinate")),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = PowerFeedCoordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class CoordinatesForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("Coordinate")),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Coordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class CircuitCoordinatesImportForm(NetBoxModelImportForm):
|
||||
class Meta:
|
||||
model = CircuitCoordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class PowerPanelCoordinatesImportForm(NetBoxModelImportForm):
|
||||
class Meta:
|
||||
model = PowerPanelCoordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class PowerFeedCoordinatesImportForm(NetBoxModelImportForm):
|
||||
class Meta:
|
||||
model = PowerFeedCoordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class CoordinatesImportForm(NetBoxModelImportForm):
|
||||
class Meta:
|
||||
model = Coordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class CircuitCoordinatesFilterForm(NetBoxModelFilterSetForm):
|
||||
model = CircuitCoordinate
|
||||
fieldsets = (
|
||||
FieldSet('q', 'filter_id'),
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("Circuit Coordinates")),
|
||||
)
|
||||
|
||||
group = forms.ModelMultipleChoiceField(
|
||||
queryset=CoordinateGroup.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
device = DynamicModelMultipleChoiceField(
|
||||
queryset=Circuit.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
x = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
y = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
class PowerPanelCoordinatesFilterForm(NetBoxModelFilterSetForm):
|
||||
model = PowerPanelCoordinate
|
||||
fieldsets = (
|
||||
FieldSet('q', 'filter_id'),
|
||||
FieldSet('group', 'device', 'x', 'y', name=_('PowerPanel Coordinates')),
|
||||
)
|
||||
|
||||
group = forms.ModelMultipleChoiceField(
|
||||
queryset=CoordinateGroup.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
device = DynamicModelMultipleChoiceField(
|
||||
queryset=PowerPanel.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
x = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
y = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
class PowerFeedCoordinatesFilterForm(NetBoxModelFilterSetForm):
|
||||
model = Coordinate
|
||||
fieldsets = (
|
||||
FieldSet('q', 'filter_id'),
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("PowerFeed Coordinates")),
|
||||
)
|
||||
|
||||
group = forms.ModelMultipleChoiceField(
|
||||
queryset=CoordinateGroup.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
device = DynamicModelMultipleChoiceField(
|
||||
queryset=PowerFeed.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
x = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
y = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
class CoordinatesFilterForm(NetBoxModelFilterSetForm):
|
||||
model = Coordinate
|
||||
fieldsets = (
|
||||
FieldSet('q', 'filter_id'),
|
||||
FieldSet('group', 'device', 'x', 'y', name=_("Coordinates")),
|
||||
)
|
||||
|
||||
group = forms.ModelMultipleChoiceField(
|
||||
queryset=CoordinateGroup.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
device = DynamicModelMultipleChoiceField(
|
||||
queryset=Device.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
x = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
y = forms.IntegerField(
|
||||
required=False
|
||||
)
|
||||
|
||||
class IndividualOptionsForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
FieldSet
|
||||
(
|
||||
'ignore_cable_type',
|
||||
'preselected_device_roles',
|
||||
'preselected_tags',
|
||||
'save_coords',
|
||||
'show_unconnected',
|
||||
'show_cables',
|
||||
'show_logical_connections',
|
||||
'show_single_cable_logical_conns',
|
||||
'show_neighbors',
|
||||
'show_circuit',
|
||||
'show_power',
|
||||
'show_wireless',
|
||||
'group_sites',
|
||||
'group_locations',
|
||||
'group_racks',
|
||||
'group_virtualchassis',
|
||||
'draw_default_layout',
|
||||
'straight_cables',
|
||||
'grid_size',
|
||||
'node_label_items',
|
||||
),
|
||||
)
|
||||
|
||||
user_id = forms.CharField(widget=forms.HiddenInput())
|
||||
|
||||
ignore_cable_type = forms.MultipleChoiceField(
|
||||
label=_('Ignore Termination Types'),
|
||||
required=False,
|
||||
choices=IndividualOptions.CHOICES,
|
||||
help_text=_('Choose Termination Types that you want to be ignored. '
|
||||
'If any ignored Termination Type is part of a connection, the '
|
||||
'cable is not displayed.')
|
||||
)
|
||||
preselected_device_roles = DynamicModelMultipleChoiceField(
|
||||
label=_('Preselected Device Role'),
|
||||
queryset=DeviceRole.objects.all(),
|
||||
required=False,
|
||||
help_text=_('Select Device Roles that you want to have '
|
||||
'preselected in the filter tab.')
|
||||
)
|
||||
preselected_tags = forms.ModelMultipleChoiceField(
|
||||
label=_('Preselected Tags'),
|
||||
queryset=Device.tags.all(),
|
||||
required=False,
|
||||
help_text=_('Select Tags that you want to have '
|
||||
'preselected in the filter tab.')
|
||||
)
|
||||
save_coords = forms.BooleanField(
|
||||
label=_('Save Coordinates'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Coordinates of nodes will be saved if dragged to a different '
|
||||
'position. This option depends on parameters set in the config file. '
|
||||
'It has no effect if \'allow_coordinates_saving\' has not been set or '
|
||||
' \'always_save_coordinates\' has been set.')
|
||||
)
|
||||
show_unconnected = forms.BooleanField(
|
||||
label=_('Show Unconnected'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Draws devices that have no connections or for which no '
|
||||
'connection is displayed. This option depends on other parameters '
|
||||
'like \'Show Cables\' and \'Show Logical Connections\'.')
|
||||
)
|
||||
show_cables = forms.BooleanField(
|
||||
label =_('Show Cables'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Displays connections between interfaces that are connected '
|
||||
'with one or more cables. These connections are displayed as solid '
|
||||
'lines in the color of the cable.')
|
||||
)
|
||||
show_logical_connections = forms.BooleanField(
|
||||
label =_('Show Logical Connections'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Displays connections between devices that are not '
|
||||
'directly connected (e.g. via patch panels). These connections '
|
||||
'are displayed as yellow dotted lines.')
|
||||
)
|
||||
show_single_cable_logical_conns = forms.BooleanField(
|
||||
label = ('Show redundant Cable and Logical Connection'),
|
||||
required = False,
|
||||
initial=False,
|
||||
help_text=_('Shows a logical connection (in addition to a cable), '
|
||||
'even if a cable is directly connected. Leaving this option '
|
||||
'disabled prevents that redundant display. This option only '
|
||||
'has an effect if \'Show Logical Connections\' is activated.')
|
||||
)
|
||||
show_neighbors = forms.BooleanField(
|
||||
label =_('Show Neighbors'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Adds neighbors to the filter result set automatically. '
|
||||
'Link peers will be added if \'Show Cables\' is ticked, far-end '
|
||||
'terminations will be added if \'Show Logical Connections\' is ticked.')
|
||||
)
|
||||
show_circuit = forms.BooleanField(
|
||||
label=_('Show Circuit Terminations'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Displays connections between circuit terminations. '
|
||||
'These connections are displayed as blue dashed lines.')
|
||||
)
|
||||
show_power = forms.BooleanField(
|
||||
label=_('Show Power Feeds'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Displays connections between power outlets and power '
|
||||
'ports. These connections are displayed as solid lines in the '
|
||||
'color of the cable. This option depends on \'Show Cables\'.')
|
||||
)
|
||||
show_wireless = forms.BooleanField(
|
||||
label =_('Show Wireless Links'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Displays wireless connections. These connections are '
|
||||
'displayed as blue dotted lines.')
|
||||
)
|
||||
group_sites = forms.BooleanField(
|
||||
label =_('Group Sites'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Draws a rectangle around Devices that belong to the '
|
||||
'same site.')
|
||||
)
|
||||
group_locations = forms.BooleanField(
|
||||
label =_('Group Locations'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Draws a rectangle around Devices that belong to the '
|
||||
'same location.')
|
||||
)
|
||||
group_racks = forms.BooleanField(
|
||||
label =_('Group Racks'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Draws a rectangle around Devices that belong to the '
|
||||
'same rack.')
|
||||
)
|
||||
group_virtualchassis = forms.BooleanField(
|
||||
label =_('Group Virtual Chassis'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Draws a rectangle around Devices that belong to the '
|
||||
'same virtual chassis.')
|
||||
)
|
||||
draw_default_layout = forms.BooleanField(
|
||||
label = ('Draw Default Layout'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Enable this option if you want to draw the topology on '
|
||||
'the initial load (when you go to the topology plugin page).')
|
||||
)
|
||||
straight_cables = forms.BooleanField(
|
||||
label=('Use Straight Cables'),
|
||||
required=False,
|
||||
initial=False,
|
||||
help_text=_('Enable this option if you want to draw cables as straight lines '
|
||||
'instead of curves.')
|
||||
)
|
||||
grid_size = forms.IntegerField(
|
||||
label=_('Grid Size'),
|
||||
required=True,
|
||||
initial=0,
|
||||
min_value=0,
|
||||
max_value=1000,
|
||||
help_text=_('Default grid value. Set to 0 to disable grid. '
|
||||
'Integers between 0 and 1000 are allowed. Snap to grid will be '
|
||||
'automatically enabled for values > 0.')
|
||||
)
|
||||
node_label_items = forms.MultipleChoiceField(
|
||||
label=_('Node Label Items'),
|
||||
required=False,
|
||||
choices=NodeLabelItems,
|
||||
help_text=_('Choose Label Items that you want to be displayed.')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = IndividualOptions
|
||||
fields = [
|
||||
'user_id', 'ignore_cable_type', 'preselected_device_roles', 'preselected_tags',
|
||||
'save_coords', 'show_unconnected', 'show_cables', 'show_logical_connections',
|
||||
'show_single_cable_logical_conns', 'show_neighbors', 'show_circuit', 'show_power',
|
||||
'show_wireless', 'group_sites', 'group_locations', 'group_racks', 'group_virtualchassis', 'draw_default_layout',
|
||||
'straight_cables', 'grid_size', 'node_label_items'
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
# Generated by Django 4.0.8 on 2022-12-06 13:07
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('contenttypes', '0002_remove_content_type_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RoleImage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('image', models.CharField(max_length=255)),
|
||||
('object_id', models.PositiveIntegerField(blank=True, null=True)),
|
||||
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')),
|
||||
],
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='roleimage',
|
||||
index=models.Index(fields=['content_type', 'object_id'], name='netbox_topo_content_9d87d4_idx'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,42 @@
|
||||
# Generated by Django 4.1.4 on 2023-03-19 14:13
|
||||
|
||||
from django.db import migrations, models
|
||||
import taggit.managers
|
||||
import utilities.json
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dcim', '0167_module_status'),
|
||||
('extras', '0084_staging'),
|
||||
('netbox_topology_views', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='IndividualOptions',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
|
||||
('user_id', models.IntegerField(null=True, unique=True)),
|
||||
('ignore_cable_type', models.CharField(blank=True, max_length=255)),
|
||||
('show_unconnected', models.BooleanField(default=False)),
|
||||
('show_cables', models.BooleanField(default=False)),
|
||||
('show_logical_connections', models.BooleanField(default=False)),
|
||||
('show_single_cable_logical_conns', models.BooleanField(default=False)),
|
||||
('show_circuit', models.BooleanField(default=False)),
|
||||
('show_power', models.BooleanField(default=False)),
|
||||
('show_wireless', models.BooleanField(default=False)),
|
||||
('draw_default_layout', models.BooleanField(default=False)),
|
||||
('preselected_device_roles', models.ManyToManyField(blank=True, db_table='netbox_topology_views_individualoptions_preselected_device', related_name='+', to='dcim.devicerole')),
|
||||
('preselected_tags', models.ManyToManyField(blank=True, db_table='netbox_topology_views_individualoptions_preselected_tag', related_name='+', to='extras.tag')),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.1.8 on 2023-04-29 09:17
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0002_individualoptions'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='show_neighbors',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,49 @@
|
||||
# Generated by Django 4.1.8 on 2023-05-01 16:13
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import taggit.managers
|
||||
import utilities.json
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0003_individualoptions_show_neighbors'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CoordinateGroup',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
|
||||
('name', models.CharField(max_length=100, unique=True)),
|
||||
('description', models.CharField(blank=True, max_length=255)),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['name'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Coordinate',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
|
||||
('x', models.IntegerField()),
|
||||
('y', models.IntegerField()),
|
||||
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.device')),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['group', 'device'],
|
||||
'unique_together': {('device', 'group')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.1.8 on 2023-05-23 20:13
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0004_coordinategroup_coordinate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='save_coords',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,70 @@
|
||||
# Generated by Django 4.1.8 on 2023-09-25 21:18
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import taggit.managers
|
||||
import utilities.json
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0005_individualoptions_save_coords'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='PowerPanelCoordinate',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
|
||||
('x', models.IntegerField()),
|
||||
('y', models.IntegerField()),
|
||||
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.powerpanel')),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['group', 'device'],
|
||||
'unique_together': {('device', 'group')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PowerFeedCoordinate',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
|
||||
('x', models.IntegerField()),
|
||||
('y', models.IntegerField()),
|
||||
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.powerfeed')),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['group', 'device'],
|
||||
'unique_together': {('device', 'group')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CircuitCoordinate',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
|
||||
('x', models.IntegerField()),
|
||||
('y', models.IntegerField()),
|
||||
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuit')),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['group', 'device'],
|
||||
'unique_together': {('device', 'group')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
# Generated by Django 4.2.10 on 2024-03-02 16:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0006_powerpanelcoordinate_powerfeedcoordinate_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='group_locations',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='group_racks',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='group_sites',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.10 on 2024-04-29 14:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0007_individualoptions_group_locations_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='straight_cables',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.6 on 2024-07-29 08:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0008_straight_cables'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='group_virtualchassis',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.6 on 2024-08-14 09:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0009_individualoptions_group_virtualchassis'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='grid_size',
|
||||
field=models.PositiveSmallIntegerField(default=0),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.9 on 2024-09-27 18:19
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('netbox_topology_views', '0010_individualoptions_grid_size'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='individualoptions',
|
||||
name='node_label_items',
|
||||
field=models.CharField(blank=True, max_length=255),
|
||||
),
|
||||
]
|
||||
@@ -1,3 +1,419 @@
|
||||
from django.db import models
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
# no modeles yet
|
||||
from circuits.models import Circuit
|
||||
from dcim.models import Device, DeviceRole, PowerPanel, PowerFeed
|
||||
from extras.models import Tag
|
||||
from django.conf import settings
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
from django.templatetags.static import static
|
||||
from django.urls import reverse
|
||||
from netbox.models import NetBoxModel
|
||||
from netbox.models.features import (
|
||||
ChangeLoggingMixin,
|
||||
ExportTemplatesMixin,
|
||||
EventRulesMixin,
|
||||
)
|
||||
|
||||
from netbox_topology_views.utils import (
|
||||
CONF_IMAGE_DIR,
|
||||
IMAGE_DIR,
|
||||
Role,
|
||||
find_image_url,
|
||||
get_model_role,
|
||||
image_static_url,
|
||||
)
|
||||
|
||||
from netbox_topology_views.choices import NodeLabelItems
|
||||
|
||||
class RoleImage(ChangeLoggingMixin, ExportTemplatesMixin, EventRulesMixin):
|
||||
class Meta:
|
||||
indexes = [
|
||||
models.Index(fields=["content_type", "object_id"]),
|
||||
]
|
||||
|
||||
objects: "models.Manager[RoleImage]"
|
||||
|
||||
image = models.CharField("Path within the netbox static directory", max_length=255)
|
||||
|
||||
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
|
||||
object_id = models.PositiveIntegerField(null=True, blank=True)
|
||||
|
||||
__role: Optional[Role] = None
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
@property
|
||||
def role(self) -> Role:
|
||||
if self.__role:
|
||||
return self.__role
|
||||
|
||||
model_class = self.content_type.model_class()
|
||||
|
||||
if not model_class:
|
||||
raise ValueError(f"Invalid content type: {self.content_type}")
|
||||
|
||||
if model_class == DeviceRole:
|
||||
device_role: DeviceRole = DeviceRole.objects.get(pk=self.object_id)
|
||||
self.__role = Role(slug=device_role.slug, name=device_role.name)
|
||||
return self.__role
|
||||
|
||||
self.__role = get_model_role(model_class)
|
||||
return self.__role
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.role} - {self.image}"
|
||||
|
||||
def get_image(self) -> Path:
|
||||
"""Get Icon
|
||||
|
||||
returns the model's image's absolute path in the filesystem
|
||||
raises ValueError if the file cannot be found
|
||||
"""
|
||||
path = Path(settings.STATIC_ROOT) / self.image
|
||||
|
||||
if not path.exists():
|
||||
raise ValueError(f"{self.role} path '{path}' does not exists")
|
||||
|
||||
return path
|
||||
|
||||
def get_default_image(self, dir: Path = CONF_IMAGE_DIR):
|
||||
"""Get default image
|
||||
|
||||
will attempt to find image in given directory with any file extension,
|
||||
otherwise will try to find a `role-unknown` image
|
||||
|
||||
fallback is `STATIC_ROOT/netbox_topology_views/img/role-unknown.png`
|
||||
"""
|
||||
if url := find_image_url(self.role.slug, dir):
|
||||
return url
|
||||
|
||||
# fallback to default role unknown image
|
||||
return image_static_url(IMAGE_DIR / "role-unknown.png")
|
||||
|
||||
def get_image_url(self, dir: Path = CONF_IMAGE_DIR) -> str:
|
||||
try:
|
||||
self.get_image()
|
||||
except ValueError:
|
||||
return self.get_default_image(dir)
|
||||
return static(f"/{self.image}")
|
||||
|
||||
class CoordinateGroup(NetBoxModel):
|
||||
"""
|
||||
A coordinate group is used to display the topology for a particular group.
|
||||
This allows different visualizations with the same devices.
|
||||
"""
|
||||
name = models.CharField(
|
||||
max_length=100,
|
||||
unique=True,
|
||||
)
|
||||
|
||||
description = models.CharField(
|
||||
max_length=255,
|
||||
blank = True,
|
||||
)
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
class Meta:
|
||||
ordering = ['name']
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('plugins:netbox_topology_views:coordinategroup', args=[self.pk])
|
||||
|
||||
class Coordinate(NetBoxModel):
|
||||
"""
|
||||
Coordinates are being used to place devices in a topology view onto a certain
|
||||
position. Devices belong to one or more coordinate groups. They have to
|
||||
be unique together.
|
||||
"""
|
||||
device = models.ForeignKey(Device, on_delete=models.CASCADE)
|
||||
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
|
||||
|
||||
x = models.IntegerField(
|
||||
help_text='X-coordinate of the device (horizontal) on the canvas. '
|
||||
'Smaller values correspond to a position further to the left on the monitor.',
|
||||
)
|
||||
y = models.IntegerField(
|
||||
help_text='Y-coordinate of the device (vertical) on the canvas. '
|
||||
'Smaller values correspond to a position further up on the monitor.',
|
||||
)
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
def get_or_create_default_group(group_id):
|
||||
# Default group named "default" must always exist in order to make sure
|
||||
# that coordinate values can be stored even if no coordinate group has been
|
||||
# selected. The default group will be added automatically if it does not exist.
|
||||
try:
|
||||
if CoordinateGroup.objects.filter(name="default"):
|
||||
group = CoordinateGroup.objects.get(name="default")
|
||||
group_id = group.pk
|
||||
else:
|
||||
group = CoordinateGroup(
|
||||
name="default",
|
||||
description="Automatically generated default group. If you delete "
|
||||
"this group, all default coordinates are gone for good but "
|
||||
"the group itself will be re-created."
|
||||
)
|
||||
group.save()
|
||||
group_id = group.pk
|
||||
except:
|
||||
return False
|
||||
return group_id
|
||||
|
||||
class Meta:
|
||||
ordering = ['group', 'device']
|
||||
unique_together = ('device', 'group')
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.x};{self.y}'
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('plugins:netbox_topology_views:coordinate', args=[self.pk])
|
||||
|
||||
class CircuitCoordinate(NetBoxModel):
|
||||
"""
|
||||
Coordinates are being used to place devices in a topology view onto a certain
|
||||
position. Devices belong to one or more coordinate groups. They have to
|
||||
be unique together.
|
||||
"""
|
||||
device = models.ForeignKey(Circuit, on_delete=models.CASCADE)
|
||||
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
|
||||
|
||||
x = models.IntegerField(
|
||||
help_text='X-coordinate of the device (horizontal) on the canvas. '
|
||||
'Smaller values correspond to a position further to the left on the monitor.',
|
||||
)
|
||||
y = models.IntegerField(
|
||||
help_text='Y-coordinate of the device (vertical) on the canvas. '
|
||||
'Smaller values correspond to a position further up on the monitor.',
|
||||
)
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
def get_or_create_default_group(group_id):
|
||||
# Default group named "default" must always exist in order to make sure
|
||||
# that coordinate values can be stored even if no coordinate group has been
|
||||
# selected. The default group will be added automatically if it does not exist.
|
||||
try:
|
||||
if CoordinateGroup.objects.filter(name="default"):
|
||||
group = CoordinateGroup.objects.get(name="default")
|
||||
group_id = group.pk
|
||||
else:
|
||||
group = CoordinateGroup(
|
||||
name="default",
|
||||
description="Automatically generated default group. If you delete "
|
||||
"this group, all default coordinates are gone for good but "
|
||||
"the group itself will be re-created."
|
||||
)
|
||||
group.save()
|
||||
group_id = group.pk
|
||||
except:
|
||||
return False
|
||||
return group_id
|
||||
|
||||
class Meta:
|
||||
ordering = ['group', 'device']
|
||||
unique_together = ('device', 'group')
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.x};{self.y}'
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('plugins:netbox_topology_views:circuitcoordinate', args=[self.pk])
|
||||
|
||||
class PowerPanelCoordinate(NetBoxModel):
|
||||
"""
|
||||
Coordinates are being used to place devices in a topology view onto a certain
|
||||
position. Devices belong to one or more coordinate groups. They have to
|
||||
be unique together.
|
||||
"""
|
||||
device = models.ForeignKey(PowerPanel, on_delete=models.CASCADE)
|
||||
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
|
||||
|
||||
x = models.IntegerField(
|
||||
help_text='X-coordinate of the device (horizontal) on the canvas. '
|
||||
'Smaller values correspond to a position further to the left on the monitor.',
|
||||
)
|
||||
y = models.IntegerField(
|
||||
help_text='Y-coordinate of the device (vertical) on the canvas. '
|
||||
'Smaller values correspond to a position further up on the monitor.',
|
||||
)
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
def get_or_create_default_group(group_id):
|
||||
# Default group named "default" must always exist in order to make sure
|
||||
# that coordinate values can be stored even if no coordinate group has been
|
||||
# selected. The default group will be added automatically if it does not exist.
|
||||
try:
|
||||
if CoordinateGroup.objects.filter(name="default"):
|
||||
group = CoordinateGroup.objects.get(name="default")
|
||||
group_id = group.pk
|
||||
else:
|
||||
group = CoordinateGroup(
|
||||
name="default",
|
||||
description="Automatically generated default group. If you delete "
|
||||
"this group, all default coordinates are gone for good but "
|
||||
"the group itself will be re-created."
|
||||
)
|
||||
group.save()
|
||||
group_id = group.pk
|
||||
except:
|
||||
return False
|
||||
return group_id
|
||||
|
||||
class Meta:
|
||||
ordering = ['group', 'device']
|
||||
unique_together = ('device', 'group')
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.x};{self.y}'
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('plugins:netbox_topology_views:powerpanelcoordinate', args=[self.pk])
|
||||
|
||||
class PowerFeedCoordinate(NetBoxModel):
|
||||
"""
|
||||
Coordinates are being used to place devices in a topology view onto a certain
|
||||
position. Devices belong to one or more coordinate groups. They have to
|
||||
be unique together.
|
||||
"""
|
||||
device = models.ForeignKey(PowerFeed, on_delete=models.CASCADE)
|
||||
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
|
||||
|
||||
x = models.IntegerField(
|
||||
help_text='X-coordinate of the device (horizontal) on the canvas. '
|
||||
'Smaller values correspond to a position further to the left on the monitor.',
|
||||
)
|
||||
y = models.IntegerField(
|
||||
help_text='Y-coordinate of the device (vertical) on the canvas. '
|
||||
'Smaller values correspond to a position further up on the monitor.',
|
||||
)
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
def get_or_create_default_group(group_id):
|
||||
# Default group named "default" must always exist in order to make sure
|
||||
# that coordinate values can be stored even if no coordinate group has been
|
||||
# selected. The default group will be added automatically if it does not exist.
|
||||
try:
|
||||
if CoordinateGroup.objects.filter(name="default"):
|
||||
group = CoordinateGroup.objects.get(name="default")
|
||||
group_id = group.pk
|
||||
else:
|
||||
group = CoordinateGroup(
|
||||
name="default",
|
||||
description="Automatically generated default group. If you delete "
|
||||
"this group, all default coordinates are gone for good but "
|
||||
"the group itself will be re-created."
|
||||
)
|
||||
group.save()
|
||||
group_id = group.pk
|
||||
except:
|
||||
return False
|
||||
return group_id
|
||||
|
||||
class Meta:
|
||||
ordering = ['group', 'device']
|
||||
unique_together = ('device', 'group')
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.x};{self.y}'
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('plugins:netbox_topology_views:powerfeedcoordinate', args=[self.pk])
|
||||
|
||||
class IndividualOptions(NetBoxModel):
|
||||
CHOICES = (
|
||||
('interface', 'interface'),
|
||||
('frontport', 'frontport'),
|
||||
('rearport', 'rearport'),
|
||||
('poweroutlet', 'poweroutlet'),
|
||||
('powerport', 'powerport'),
|
||||
('consoleport', 'consoleport'),
|
||||
('consoleserverport', 'consoleserverport'),
|
||||
)
|
||||
|
||||
user_id = models.IntegerField(
|
||||
null=True,
|
||||
unique=True
|
||||
)
|
||||
ignore_cable_type = models.CharField(
|
||||
max_length = 255,
|
||||
blank = True,
|
||||
)
|
||||
preselected_device_roles = models.ManyToManyField(
|
||||
to='dcim.DeviceRole',
|
||||
related_name='+',
|
||||
blank=True,
|
||||
db_table='netbox_topology_views_individualoptions_preselected_device',
|
||||
)
|
||||
preselected_tags = models.ManyToManyField(
|
||||
to='extras.Tag',
|
||||
related_name='+',
|
||||
blank=True,
|
||||
db_table='netbox_topology_views_individualoptions_preselected_tag',
|
||||
)
|
||||
save_coords = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_unconnected = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_cables = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_logical_connections = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_single_cable_logical_conns = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_neighbors = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_circuit = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_power = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
show_wireless = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
group_sites = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
group_locations = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
group_racks = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
group_virtualchassis = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
draw_default_layout = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
straight_cables = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
grid_size = models.PositiveSmallIntegerField(
|
||||
default=0
|
||||
)
|
||||
node_label_items = models.CharField(
|
||||
max_length=255,
|
||||
blank=True
|
||||
)
|
||||
|
||||
_netbox_private = True
|
||||
|
||||
def __str___(self):
|
||||
return f"{self.user_id}"
|
||||
|
||||
@@ -1,10 +1,103 @@
|
||||
from extras.plugins import PluginMenuButton, PluginMenuItem
|
||||
from utilities.choices import ButtonColorChoices
|
||||
from netbox.plugins import PluginMenu, PluginMenuItem, PluginMenuButton
|
||||
|
||||
menu_items = (
|
||||
PluginMenuItem(
|
||||
link='plugins:netbox_topology_views:home',
|
||||
link_text='Topology',
|
||||
buttons=()
|
||||
coordinategroup_buttons = (
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:coordinategroup_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
permissions=['netbox_topology_views.add_coordinategroup']
|
||||
),
|
||||
)
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:coordinategroup_import',
|
||||
title='Import',
|
||||
icon_class='mdi mdi-upload',
|
||||
permissions=['netbox_topology_views.add_coordinategroup']
|
||||
)
|
||||
)
|
||||
|
||||
circuitcoordinate_buttons = (
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:circuitcoordinate_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
),
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:circuitcoordinate_import',
|
||||
title='Import',
|
||||
icon_class='mdi mdi-upload',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
)
|
||||
)
|
||||
|
||||
powerpanelcoordinate_buttons = (
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:powerpanelcoordinate_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
),
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:powerpanelcoordinate_import',
|
||||
title='Import',
|
||||
icon_class='mdi mdi-upload',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
)
|
||||
)
|
||||
|
||||
powerfeedcoordinate_buttons = (
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:powerfeedcoordinate_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
),
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:powerfeedcoordinate_import',
|
||||
title='Import',
|
||||
icon_class='mdi mdi-upload',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
)
|
||||
)
|
||||
|
||||
coordinate_buttons = (
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:coordinate_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
),
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:coordinate_import',
|
||||
title='Import',
|
||||
icon_class='mdi mdi-upload',
|
||||
permissions=['netbox_topology_views.add_coordinate']
|
||||
)
|
||||
)
|
||||
|
||||
menu = PluginMenu(
|
||||
label='Topology Views',
|
||||
icon_class="mdi mdi-sitemap",
|
||||
groups=(
|
||||
('TOPOLOGY',
|
||||
(
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:home", link_text="Topology", permissions=["dcim.view_site", "dcim.view_device"]),
|
||||
),
|
||||
),
|
||||
('COORDINATES',
|
||||
(
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:coordinategroup_list", link_text="Coordinate Groups", buttons=coordinategroup_buttons, permissions=['netbox_topology_views.view_coordinategroup']),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:coordinate_list", link_text="Device Coordinates", buttons=coordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:powerfeedcoordinate_list", link_text="Power Feed Coords", buttons=powerfeedcoordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:powerpanelcoordinate_list", link_text="Power Panel Coords", buttons=powerpanelcoordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:circuitcoordinate_list", link_text="Circuit Coordinates", buttons=circuitcoordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
|
||||
),
|
||||
),
|
||||
('PREFERENCES',
|
||||
(
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:images", link_text="Images", permissions=[ "dcim.view_site","dcim.view_devicerole"]),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:individualoptions", link_text="Individual Options", permissions=['netbox_topology_views.change_individualoptions']),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
from netbox.search import SearchIndex, register_search
|
||||
from .models import CoordinateGroup, Coordinate
|
||||
|
||||
@register_search
|
||||
class CoordinateGroupsIndex(SearchIndex):
|
||||
model = CoordinateGroup
|
||||
fields = (
|
||||
('name', 100),
|
||||
('description', 2000),
|
||||
)
|
||||
|
||||
@register_search
|
||||
class CoordinatesIndex(SearchIndex):
|
||||
model = Coordinate
|
||||
fields = (
|
||||
('group', 100),
|
||||
('device', 200),
|
||||
)
|
||||
@@ -0,0 +1,14 @@
|
||||
from typing import Type
|
||||
|
||||
from dcim.models import DeviceRole
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db.models.signals import pre_delete
|
||||
from django.dispatch import receiver
|
||||
|
||||
from netbox_topology_views.models import RoleImage
|
||||
|
||||
|
||||
@receiver(pre_delete, sender=DeviceRole, dispatch_uid="delete_hanging_role_image")
|
||||
def delete_hanging_role_image(sender: Type[DeviceRole], instance: DeviceRole, **kwargs):
|
||||
ct = ContentType.objects.get_for_model(sender)
|
||||
RoleImage.objects.filter(content_type=ct, object_id=instance.id).delete()
|
||||
@@ -1 +1 @@
|
||||
#visgraph{height:70vh}
|
||||
#visgraph{height:64vh;border:1px solid #ced4da}html[data-netbox-color-mode=dark] #visgraph{background-color:#212529;border:1px solid #495057}.image-dropdown img{width:64px;height:64px}.image-dropdown-content{display:flex;flex-wrap:wrap;gap:.5rem;padding-inline:.5rem;width:50vw;max-width:32rem}.image-dropdown-content>img{cursor:pointer}
|
||||
|
||||
@@ -0,0 +1,427 @@
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public licenses.
|
||||
Notwithstanding, Creative Commons may elect to apply one of its public
|
||||
licenses to material it publishes and in those instances will be
|
||||
considered the “Licensor.” The text of the Creative Commons public
|
||||
licenses is dedicated to the public domain under the CC0 Public Domain
|
||||
Dedication. Except for the limited purpose of indicating that material
|
||||
is shared under a Creative Commons public license or as otherwise
|
||||
permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the public
|
||||
licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
Before Width: | Height: | Size: 7.2 KiB |
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465637mm"
|
||||
height="35.465633mm"
|
||||
viewBox="0 0 35.465637 35.465634"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-202.61996,-22.619956)">
|
||||
<g
|
||||
id="access-switch"
|
||||
transform="translate(196.25972,-67.88785)"
|
||||
inkscape:label="access-switch"
|
||||
style="display:inline">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle4091"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g4107"
|
||||
transform="translate(-29.678837,-5.8881735)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#9cc8f8;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4093"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
|
||||
inkscape:transform-center-x="0.85152345"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#9cc8f8;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4095"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
|
||||
inkscape:transform-center-x="-0.85152352"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4097"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,0.26458333,0.26458333,0,-52.821766,59.783164)"
|
||||
inkscape:transform-center-x="1.6998618e-06"
|
||||
inkscape:transform-center-y="-0.85152379"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4099"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,-0.26458333,-0.26458333,0,160.57654,168.47443)"
|
||||
inkscape:transform-center-x="-3.173315e-06"
|
||||
inkscape:transform-center-y="0.85152188"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 47.416672,114.30099 h 12.88312"
|
||||
id="path4101" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 53.877389,107.83714 v 12.85223"
|
||||
id="path4103" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.0 KiB |
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-82.620002,-142.61999)">
|
||||
<g
|
||||
id="backhaul"
|
||||
transform="translate(76.25972,52.112147)"
|
||||
style="display:inline"
|
||||
inkscape:label="backhaul">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle9736"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g10642"
|
||||
transform="translate(0.15073904,0.61767034)">
|
||||
<path
|
||||
id="path17429-2"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 30.899474,97.531295 a 9.8385399,9.8385399 0 0 1 2.88139,6.956635 9.8385399,9.8385399 0 0 1 -2.88164,6.9569" />
|
||||
<path
|
||||
id="path17432-3"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 28.424474,100.00604 a 6.33854,6.33854 0 0 1 1.85638,4.48189 6.33854,6.33854 0 0 1 -1.85651,4.48203" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path17457-7"
|
||||
cx="104.48794"
|
||||
cy="-23.942322"
|
||||
r="2.8385401"
|
||||
transform="rotate(90)" />
|
||||
<path
|
||||
id="path17429-2-2"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 16.985167,97.531292 a 9.8385399,9.8385399 0 0 0 -2.88139,6.956638 9.8385399,9.8385399 0 0 0 2.88164,6.9569" />
|
||||
<path
|
||||
id="path17432-3-8"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 19.460167,100.00603 a 6.33854,6.33854 0 0 0 -1.85638,4.4819 6.33854,6.33854 0 0 0 1.85651,4.48202" />
|
||||
<path
|
||||
id="path15912-7"
|
||||
style="display:inline;fill:#ffffff;stroke:#1685fc;stroke-width:1.32292"
|
||||
inkscape:transform-center-x="1.6998618e-06"
|
||||
inkscape:transform-center-y="-0.85152379"
|
||||
d="m 27.748467,119.25886 c 0.380613,-0.65925 -3.044918,-11.34935 -3.806145,-11.34935 -0.76123,0 -4.186759,10.6901 -3.806145,11.34935 0.380616,0.65924 7.231676,0.65924 7.61229,0 z"
|
||||
sodipodi:nodetypes="ssss" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-382.62001,-262.61999)">
|
||||
<g
|
||||
id="backup"
|
||||
transform="translate(347.33749,116.17059)"
|
||||
style="display:inline"
|
||||
inkscape:label="backup">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle81430"
|
||||
cx="53.015301"
|
||||
cy="164.18217"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g98236"
|
||||
transform="matrix(0.7811087,0,0,0.78113868,12.067916,36.740975)"
|
||||
style="stroke-width:1.28021">
|
||||
<g
|
||||
id="g19286-6-61"
|
||||
transform="matrix(1.265502,0,0,1.2637797,55.375145,30.655237)"
|
||||
style="display:inline;stroke-width:1.01231">
|
||||
<path
|
||||
id="path16767-5-1-1"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.33929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -12.045714,96.794806 -0.0069,10.697154 m 12.9588723,0 -6.7e-7,-10.613908 m 6.7e-7,10.613908 c -4.58e-6,0.99351 -2.9009553,1.7989 -6.4794574,1.7989 -3.5785015,0 -6.4794509,-0.80539 -6.4794559,-1.7989 m 12.95891263,-3.53797 c -4.58e-6,0.99351 -2.90095473,1.7989 -6.47945643,1.7989 -3.5785016,0 -6.4794512,-0.80539 -6.4794562,-1.7989 m 12.95891263,-3.53797 c 1.532e-5,0.99351 -2.90094063,1.79891 -6.47945643,1.79891 -3.5785157,0 -6.4794712,-0.8054 -6.4794562,-1.79891 M 0.90625763,96.878052 c -6e-7,0.993506 -2.90095193,1.798902 -6.47945643,1.798902 -3.5785045,0 -6.4794552,-0.805396 -6.4794562,-1.798902 -1e-6,-0.993507 2.9009503,-1.798903 6.4794562,-1.798903 3.578506,0 6.47945782,0.805396 6.47945643,1.798903 z"
|
||||
sodipodi:nodetypes="cccccsccsccscsssss" />
|
||||
</g>
|
||||
<g
|
||||
id="g19286-6-61-5"
|
||||
transform="matrix(1.265502,0,0,1.2637797,66.229729,28.075526)"
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.01231">
|
||||
<path
|
||||
id="path16767-5-1-1-9-8"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.33929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -7.6710428,102.42738 c 3.5785,0 6.47946,0.80539 6.47945,1.7989 v 10.6139 c 0,0.99351 -2.90095,1.7989 -6.47945,1.7989 -3.5785002,0 -6.4794502,-0.80539 -6.4794602,-1.7989 l 0.007,-10.69715 -0.007,0.0833 c 0,-0.9935 2.90095,-1.7989 6.4794602,-1.7989"
|
||||
sodipodi:nodetypes="cccscccc" />
|
||||
</g>
|
||||
<g
|
||||
id="g19286-6-61-4"
|
||||
transform="matrix(1.265502,0,0,1.2637797,63.57491,37.36206)"
|
||||
style="display:inline;stroke-width:1.01231">
|
||||
<path
|
||||
id="path16767-5-1-1-8"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.33929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -12.045714,96.794806 -0.0069,10.697154 m 12.9588723,0 -6.7e-7,-10.613908 m 6.7e-7,10.613908 c -4.58e-6,0.99351 -2.9009553,1.7989 -6.4794574,1.7989 -3.5785015,0 -6.4794509,-0.80539 -6.4794559,-1.7989 m 12.95891263,-3.53797 c -4.58e-6,0.99351 -2.90095473,1.7989 -6.47945643,1.7989 -3.5785016,0 -6.4794512,-0.80539 -6.4794562,-1.7989 m 12.95891263,-3.53797 c 1.532e-5,0.99351 -2.90094063,1.79891 -6.47945643,1.79891 -3.5785157,0 -6.4794712,-0.8054 -6.4794562,-1.79891 M 0.90625763,96.878052 c -6e-7,0.993506 -2.90095193,1.798902 -6.47945643,1.798902 -3.5785045,0 -6.4794552,-0.805396 -6.4794562,-1.798902 -1e-6,-0.993507 2.9009503,-1.798903 6.4794562,-1.798903 3.578506,0 6.47945782,0.805396 6.47945643,1.798903 z"
|
||||
sodipodi:nodetypes="cccccsccsccscsssss" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-382.62,-202.61999)">
|
||||
<g
|
||||
id="cable-doubler"
|
||||
transform="translate(376.25972,112.11214)"
|
||||
style="display:inline"
|
||||
inkscape:label="cable-doubler">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle83563"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g83900">
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect83589"
|
||||
width="18.16176"
|
||||
height="3.6323516"
|
||||
x="15.01218"
|
||||
y="106.42445"
|
||||
rx="0.29990521"
|
||||
ry="0.29990521" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-4"
|
||||
cx="24.093061"
|
||||
cy="119.53722"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-30"
|
||||
cx="17.540743"
|
||||
cy="99.301231"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-7"
|
||||
cx="30.644741"
|
||||
cy="99.301231"
|
||||
r="1.4622281" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 24.093061,110.55105 v 7.52394"
|
||||
id="path83757" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 17.540742,100.42446 v 5.99999"
|
||||
id="path83757-8" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 30.644742,100.42445 v 6"
|
||||
id="path83757-8-6" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-322.62002,-262.61999)">
|
||||
<g
|
||||
id="camera-server"
|
||||
transform="translate(267.97706,-72.029954)"
|
||||
style="display:inline"
|
||||
inkscape:label="camera-server">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle133170"
|
||||
cx="72.37574"
|
||||
cy="352.38272"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g135417">
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect133172"
|
||||
width="9.2296114"
|
||||
height="15.469597"
|
||||
x="62.566021"
|
||||
y="342.61298"
|
||||
rx="0.29990521"
|
||||
ry="0.29990521" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 64.43339,344.68782 h 5.494876"
|
||||
id="path133174" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 64.43339,350.34776 h 5.494876"
|
||||
id="path133176" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 64.43339,347.51779 h 5.494876"
|
||||
id="path133178" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle133180"
|
||||
cx="67.180824"
|
||||
cy="353.56537"
|
||||
r="0.44411153" />
|
||||
</g>
|
||||
<g
|
||||
id="g22475-8"
|
||||
style="display:inline;stroke-width:1.44351"
|
||||
transform="matrix(0.69275915,0,0,0.69275915,59.475621,281.63296)">
|
||||
<path
|
||||
id="rect18871-9"
|
||||
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.90975;stop-color:#000000"
|
||||
d="m 14.911958,102.93399 h 5.735691 v -1.64713 c -0.02609,-0.68921 7.260357,-0.8024 7.271608,0 v 1.64713 h 5.354904 c 0.217132,0 0.391935,0.13376 0.391935,0.29991 v 11.63694 c 0,0.16615 -0.174803,0.29991 -0.391935,0.29991 H 14.911958 c -0.217132,0 -0.391935,-0.13376 -0.391935,-0.29991 V 103.2339 c 0,-0.16615 0.174803,-0.29991 0.391935,-0.29991 z"
|
||||
sodipodi:nodetypes="sccccssssssss" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.90964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18975-3"
|
||||
cx="24.09306"
|
||||
cy="110.50864"
|
||||
r="5.245965" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.90975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 29.548807,105.08623 h 2.045021"
|
||||
id="path22272-6" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.90975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 17.239354,102.67873 v -1.32799"
|
||||
id="path22274-8" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.90964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path22384-0"
|
||||
cx="24.09306"
|
||||
cy="110.50864"
|
||||
r="2.7517517" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-322.61999,-202.61999)">
|
||||
<g
|
||||
id="camera"
|
||||
transform="translate(316.25971,112.11214)"
|
||||
style="display:inline"
|
||||
inkscape:label="camera">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle18843"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g22475">
|
||||
<path
|
||||
id="rect18871"
|
||||
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stop-color:#000000"
|
||||
d="m 14.911958,102.93399 h 5.735691 v -1.64713 c -0.02609,-0.68921 7.260357,-0.8024 7.271608,0 v 1.64713 h 5.354904 c 0.217132,0 0.391935,0.13376 0.391935,0.29991 v 11.63694 c 0,0.16615 -0.174803,0.29991 -0.391935,0.29991 H 14.911958 c -0.217132,0 -0.391935,-0.13376 -0.391935,-0.29991 V 103.2339 c 0,-0.16615 0.174803,-0.29991 0.391935,-0.29991 z"
|
||||
sodipodi:nodetypes="sccccssssssss" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18975"
|
||||
cx="24.09306"
|
||||
cy="110.50864"
|
||||
r="5.245965" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 29.548807,105.08623 h 2.045021"
|
||||
id="path22272" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 17.239354,102.67873 v -1.32799"
|
||||
id="path22274" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path22384"
|
||||
cx="24.09306"
|
||||
cy="110.50864"
|
||||
r="2.7517517" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,208 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect19394-9"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="8"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect19394-65-3"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="8"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect19394-2-7"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="8"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect20311-4"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="8"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-442.62002,-202.62)">
|
||||
<g
|
||||
id="circuit"
|
||||
transform="translate(436.25974,112.11215)"
|
||||
style="display:inline"
|
||||
inkscape:label="circuit">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle18767"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g20833">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 14.065394,106.83296 h 2.654946 a 2.1166667,2.1166667 135 0 0 2.116667,-2.11667 v -7.132546"
|
||||
id="path18804"
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:original-d="m 14.065394,106.83296 h 4.771613 v -9.249216"
|
||||
inkscape:path-effect="#path-effect19394-9" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 34.485764,109.52303 h -2.654946 a 2.1166667,2.1166667 135 0 0 -2.116667,2.11667 v 6.9639"
|
||||
id="path18804-6"
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:original-d="m 34.485764,109.52303 h -4.771613 v 9.08057"
|
||||
inkscape:path-effect="#path-effect19394-65-3" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 18.699598,110.71392 h 2.654946 a 2.1166667,2.1166667 135 0 0 2.116667,-2.11667 V 96.282484"
|
||||
id="path18804-0"
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:original-d="m 18.699598,110.71392 h 4.771613 V 96.282484"
|
||||
inkscape:path-effect="#path-effect19394-2-7" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 22.254741,120.04698 v -4.75769 a 2.1166667,2.1166667 135 0 1 2.116667,-2.11667 h 0.217414 a 2.1166667,2.1166667 135 0 0 2.116667,-2.11667 v -4.30433 a 2.1166667,2.1166667 135 0 1 2.116667,-2.11667 h 2.363756"
|
||||
id="path20181"
|
||||
inkscape:original-d="m 22.254741,120.04698 v -6.87436 h 4.450748 v -8.53767 h 4.480423"
|
||||
inkscape:path-effect="#path-effect20311-4" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path20353"
|
||||
cx="14.065394"
|
||||
cy="106.83296"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-9"
|
||||
cx="18.699598"
|
||||
cy="110.71392"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-3"
|
||||
cx="31.185911"
|
||||
cy="104.63495"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7"
|
||||
cx="34.485764"
|
||||
cy="109.52303"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5"
|
||||
cx="29.714151"
|
||||
cy="118.6036"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-2"
|
||||
cx="18.837008"
|
||||
cy="97.58374"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-54"
|
||||
cx="23.47121"
|
||||
cy="96.282486"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-7"
|
||||
cx="22.254742"
|
||||
cy="120.04698"
|
||||
r="1.4622281" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,188 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect105690-6"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="7"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-262.61999,-262.61999)">
|
||||
<g
|
||||
id="console-server"
|
||||
transform="translate(207.97703,-72.029954)"
|
||||
style="display:inline"
|
||||
inkscape:label="console-server">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle99845"
|
||||
cx="72.37574"
|
||||
cy="352.38272"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g105857"
|
||||
transform="translate(-44.96434,2.3640395)">
|
||||
<g
|
||||
id="g105712"
|
||||
transform="matrix(0.74706177,0,0,0.74706177,47.075033,96.696391)"
|
||||
style="stroke-width:1.33858">
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect19922-4"
|
||||
width="12.354549"
|
||||
height="20.707253"
|
||||
x="80.924133"
|
||||
y="326.01392"
|
||||
rx="0.40144634"
|
||||
ry="0.40144634" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 83.423753,328.79127 H 90.77907"
|
||||
id="path19957-7" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 83.423753,336.36754 H 90.77907"
|
||||
id="path19957-0-6" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 83.423753,332.57941 H 90.77907"
|
||||
id="path19957-3-3" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.77083;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17"
|
||||
cx="87.10141"
|
||||
cy="340.67456"
|
||||
r="0.59447765" />
|
||||
</g>
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 126.98427,357.8261 h -11.77004 a 1.34475,1.34475 38.203142 0 1 -1.30708,-1.02869 l -1.3349,-5.52049 a 0.83292016,0.83292016 128.20314 0 1 0.80958,-1.02869 l 15.43485,0 a 0.83291909,0.83291909 51.796894 0 1 0.80958,1.02869 l -1.33491,5.52049 a 1.3447517,1.3447517 141.79689 0 1 -1.30708,1.02869 z"
|
||||
id="path104407"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:original-d="m 128.0426,357.8261 h -13.8867 l -1.8324,-7.57787 h 17.55151 z"
|
||||
inkscape:path-effect="#path-effect105690-6" />
|
||||
<g
|
||||
id="g105688"
|
||||
transform="matrix(0.79805577,0,0,0.79805577,22.763649,81.818574)"
|
||||
style="stroke-width:1.25305">
|
||||
<g
|
||||
id="g105442"
|
||||
transform="translate(64.620413,228.56428)"
|
||||
style="stroke-width:1.25305">
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-4"
|
||||
cx="51.186554"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-1"
|
||||
cx="54.892548"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-8"
|
||||
cx="58.598576"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-5"
|
||||
cx="62.30452"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-9"
|
||||
cx="66.010551"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
</g>
|
||||
<g
|
||||
id="g105442-1"
|
||||
transform="translate(62.767416,231.90299)"
|
||||
style="display:inline;stroke-width:1.25305">
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-1-9"
|
||||
cx="54.892548"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-8-6"
|
||||
cx="58.598576"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-5-4"
|
||||
cx="62.30452"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-17-9-3"
|
||||
cx="66.010551"
|
||||
cy="110.86858"
|
||||
r="0.59447765" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465633mm"
|
||||
height="35.465637mm"
|
||||
viewBox="0 0 35.465633 35.465637"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-322.62001,-22.619956)">
|
||||
<g
|
||||
id="g1153"
|
||||
inkscape:label="core-router"
|
||||
style="display:inline"
|
||||
transform="translate(227.33747,-3.8293975)">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle977"
|
||||
cx="113.01536"
|
||||
cy="44.182171"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g1145">
|
||||
<g
|
||||
id="g1158"
|
||||
transform="translate(0,-0.68712819)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path979"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,62.296384,-70.236637)"
|
||||
inkscape:transform-center-x="0.85152345"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path981"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.26458333,0,0,0.26458333,163.73434,-53.423074)"
|
||||
inkscape:transform-center-x="-0.85152352"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 110.1575,36.497284 c 25.26437,-0.477736 -15.691945,16.149717 0.5946,16.683167 l 5.04786,0.165337"
|
||||
id="path983"
|
||||
sodipodi:nodetypes="csc" />
|
||||
</g>
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path16050-36"
|
||||
cx="113.01536"
|
||||
cy="44.182171"
|
||||
r="2.5286407" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 8.2 KiB |
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465633mm"
|
||||
height="35.465633mm"
|
||||
viewBox="0 0 35.465633 35.465634"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-82.619962,-22.619957)">
|
||||
<g
|
||||
id="core-switch"
|
||||
transform="translate(76.25972,-67.887849)"
|
||||
style="display:inline"
|
||||
inkscape:label="core-switch">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle15906"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g16139"
|
||||
transform="translate(-29.678837,-5.8881735)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path15908"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
|
||||
inkscape:transform-center-x="0.85152345"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path15910"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
|
||||
inkscape:transform-center-x="-0.85152352"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path15912"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,0.26458333,0.26458333,0,-52.821766,59.783164)"
|
||||
inkscape:transform-center-x="1.6998618e-06"
|
||||
inkscape:transform-center-y="-0.85152379"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path15914"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,-0.26458333,-0.26458333,0,160.57654,168.47443)"
|
||||
inkscape:transform-center-x="-3.173315e-06"
|
||||
inkscape:transform-center-y="0.85152188"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 47.416672,114.30099 h 12.88312"
|
||||
id="path15916" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 53.877389,107.83714 v 12.85223"
|
||||
id="path15918" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path16050"
|
||||
cx="53.877388"
|
||||
cy="114.30099"
|
||||
r="2.5286407" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-82.620002,-262.61999)">
|
||||
<g
|
||||
id="database-server"
|
||||
transform="translate(76.25972,172.11214)"
|
||||
style="display:inline"
|
||||
inkscape:label="database-server">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle20337"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g22247"
|
||||
transform="matrix(0.74763892,0,0,0.74759268,32.764696,30.639803)"
|
||||
style="stroke-width:1.33759">
|
||||
<path
|
||||
id="rect19922-6"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:6.68834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -80.251467,79.095818 -36.089533,-2e-6 c -0.62796,0 -1.1335,-0.505541 -1.1335,-1.1335 V 1.9656847 c 0,-0.627959 0.50554,-1.13350002 1.1335,-1.13350002 v 0 h 44.427356 c 0.627959,0 1.1335,0.50554102 1.1335,1.13350002 V 34.179928"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,6.360242,90.507807)" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -22.221938,93.505349 h 7.355317"
|
||||
id="path19957-32" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -22.221938,101.08162 h 7.355317"
|
||||
id="path19957-0-0" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -22.221938,97.293489 h 7.355317"
|
||||
id="path19957-3-6" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.76952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20101-1"
|
||||
cx="-18.544279"
|
||||
cy="105.38864"
|
||||
r="0.59447765" />
|
||||
<path
|
||||
id="path20339-5"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -14.866621,101.08162 -0.0087,13.51885 m 16.3994782,0 -1e-6,-13.41365 m 1e-6,13.41365 c -6e-6,1.25558 -3.671164,2.27341 -8.199766,2.27341 -4.5286012,0 -8.1997582,-1.01783 -8.1997642,-2.27341 m 16.3995272,-4.47122 c -5e-6,1.25558 -3.671163,2.27342 -8.199765,2.27342 -4.5286012,0 -8.1997582,-1.01784 -8.1997642,-2.27342 m 16.3995292,-4.47121 c 2e-5,1.25558 -3.671145,2.27342 -8.199765,2.27342 -4.5286192,0 -8.1997832,-1.01784 -8.1997642,-2.27342 m 16.3995292,-4.47122 c 0,1.25558 -3.671161,2.27342 -8.199765,2.27342 -4.5286052,0 -8.1997632,-1.01784 -8.1997642,-2.27342 -10e-7,-1.255569 3.671158,-2.273412 8.1997642,-2.273412 4.528607,0 8.199768,1.017843 8.199765,2.273412 z"
|
||||
sodipodi:nodetypes="cccccsccsccscsssss" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-142.62001,-262.61999)">
|
||||
<g
|
||||
id="database"
|
||||
transform="translate(136.25973,172.11214)"
|
||||
style="display:inline"
|
||||
inkscape:label="database">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle20208"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g19286-6"
|
||||
transform="matrix(1.265502,0,0,1.2637797,31.145953,-20.898708)"
|
||||
style="display:inline;stroke-width:0.790738">
|
||||
<path
|
||||
id="path16767-5-1"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.04615;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -12.045714,96.794806 -0.0069,10.697154 m 12.9588723,0 -6.7e-7,-10.613908 m 6.7e-7,10.613908 c -4.58e-6,0.99351 -2.9009553,1.7989 -6.4794574,1.7989 -3.5785015,0 -6.4794509,-0.80539 -6.4794559,-1.7989 m 12.95891263,-3.53797 c -4.58e-6,0.99351 -2.90095473,1.7989 -6.47945643,1.7989 -3.5785016,0 -6.4794512,-0.80539 -6.4794562,-1.7989 m 12.95891263,-3.53797 c 1.532e-5,0.99351 -2.90094063,1.79891 -6.47945643,1.79891 -3.5785157,0 -6.4794712,-0.8054 -6.4794562,-1.79891 M 0.90625763,96.878052 c -6e-7,0.993506 -2.90095193,1.798902 -6.47945643,1.798902 -3.5785045,0 -6.4794552,-0.805396 -6.4794562,-1.798902 -1e-6,-0.993507 2.9009503,-1.798903 6.4794562,-1.798903 3.578506,0 6.47945782,0.805396 6.47945643,1.798903 z"
|
||||
sodipodi:nodetypes="cccccsccsccscsssss" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect16898-8-6"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-202.62001,-142.62)">
|
||||
<g
|
||||
id="dect-station"
|
||||
style="display:inline"
|
||||
transform="translate(227.33747,-3.8293975)"
|
||||
inkscape:label="dect-station">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle934-9"
|
||||
cx="-6.9846783"
|
||||
cy="164.18217"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g10034-1"
|
||||
transform="translate(-31.077738,55.941548)">
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 14.418108,115.90978 H 33.76802"
|
||||
id="path942-9" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.093064,114.8012 v -6.00466"
|
||||
id="path5756-9" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path16050-3-33"
|
||||
cx="24.093063"
|
||||
cy="115.90978"
|
||||
r="2.5286407" />
|
||||
</g>
|
||||
<g
|
||||
id="g10642-0"
|
||||
transform="translate(-30.927015,56.127067)"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path17429-2-8"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 30.899474,97.531295 a 9.8385399,9.8385399 0 0 1 2.88139,6.956635 9.8385399,9.8385399 0 0 1 -2.88164,6.9569" />
|
||||
<path
|
||||
id="path17432-3-1"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 28.424474,100.00604 a 6.33854,6.33854 0 0 1 1.85638,4.48189 6.33854,6.33854 0 0 1 -1.85651,4.48203" />
|
||||
<path
|
||||
id="path17429-2-2-1"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 16.985167,97.531292 a 9.8385399,9.8385399 0 0 0 -2.88139,6.956638 9.8385399,9.8385399 0 0 0 2.88164,6.9569" />
|
||||
<path
|
||||
id="path17432-3-8-1"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 19.460167,100.00603 a 6.33854,6.33854 0 0 0 -1.85638,4.4819 6.33854,6.33854 0 0 0 1.85651,4.48202" />
|
||||
</g>
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -7.5536212,164.41077 c -0.2846637,-0.49945 -0.9201464,-1.79725 -1.034094,-3.59636 -0.00917,-0.14474 -0.017152,-0.38071 -0.017047,-0.52682 0.00128,-1.7963 0.6315279,-3.0729 0.919632,-3.56272 0.073414,-0.12481 0.2571414,-0.2431 0.4007546,-0.27008 l 1.5176457,-0.2851 a 0.22306614,0.22306614 39.226836 0 1 0.2642224,0.2157 l 0.02121,1.33988 a 0.18993774,0.18993774 143.41949 0 1 -0.2478062,0.18391 l -0.4790348,-0.15331 c -0.1391724,-0.0445 -0.3371064,0.002 -0.4303679,0.11489 -0.2983088,0.36003 -0.8714107,1.20575 -0.92698,2.44154 -0.00655,0.14567 -0.00278,0.3826 0.00836,0.52827 0.095463,1.24786 0.7042702,2.11631 1.011943,2.48125 0.093298,0.11067 0.2889819,0.15286 0.4265274,0.10352 l 0.4781933,-0.17151 a 0.18933683,0.18933683 34.680743 0 1 0.253236,0.17522 l 0.02258,1.42644 a 0.20619403,0.20619403 141.16323 0 1 -0.2533697,0.20398 l -1.5401023,-0.36217 c -0.1422451,-0.0335 -0.3231029,-0.1595 -0.3955033,-0.28653 z"
|
||||
id="path16892-5"
|
||||
sodipodi:nodetypes="czcccczcccc"
|
||||
inkscape:original-d="m -7.4156754,164.63673 c 0,0 -1.1015015,-1.60214 -1.1847397,-4.08461 -0.083243,-2.48247 1.0560045,-4.04848 1.0560045,-4.04848 l 2.0377151,-0.3828 0.029585,1.86898 -0.9830226,-0.31459 c 0,0 -1.1383056,1.0598 -1.1091632,2.90108 0.029147,1.8413 1.2015925,2.93836 1.2015925,2.93836 l 0.9762897,-0.35017 0.030956,1.95554 z"
|
||||
inkscape:path-effect="#path-effect16898-8-6" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465553mm"
|
||||
height="35.465553mm"
|
||||
viewBox="0 0 35.465553 35.465553"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-142.62001,-322.61998)">
|
||||
<g
|
||||
id="desktop"
|
||||
transform="matrix(0.8695205,0,0,0.8695205,216.08081,53.553877)"
|
||||
style="display:inline;stroke-width:1.15006"
|
||||
inkscape:label="desktop">
|
||||
<g
|
||||
id="g22531"
|
||||
transform="translate(-25.161923,-109.952)">
|
||||
<circle
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle126519-1"
|
||||
cx="-45.105873"
|
||||
cy="439.78769"
|
||||
r="17.071318"
|
||||
transform="matrix(1.1500591,0,0,1.1500591,12.945821,-65.994159)" />
|
||||
<g
|
||||
id="g126531-8"
|
||||
transform="translate(-67.856764,331.98443)"
|
||||
style="stroke-width:1.15006">
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect126521-7"
|
||||
width="12.354549"
|
||||
height="20.707253"
|
||||
x="16.573616"
|
||||
y="97.449631"
|
||||
rx="0.34490871"
|
||||
ry="0.34490871" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 19.073232,100.22699 h 7.355317"
|
||||
id="path126523-9" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52144;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="circle126529-2"
|
||||
cx="22.750891"
|
||||
cy="112.11028"
|
||||
r="0.59447765" />
|
||||
</g>
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect22382"
|
||||
width="16.474653"
|
||||
height="11.775289"
|
||||
x="-42.013367"
|
||||
y="435.73035"
|
||||
rx="0.34501827"
|
||||
ry="0.34501827" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect22384"
|
||||
width="1.367956"
|
||||
height="2.6356843"
|
||||
x="-34.460018"
|
||||
y="447.50565"
|
||||
rx="0.34501827"
|
||||
ry="0.34501827" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect22386"
|
||||
width="10.305123"
|
||||
height="1.5857563"
|
||||
x="-38.9286"
|
||||
y="450.14133"
|
||||
rx="0.34501827"
|
||||
ry="0.34501827" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
@@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465637mm"
|
||||
height="35.465633mm"
|
||||
viewBox="0 0 35.465637 35.465634"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-142.61997,-22.619957)">
|
||||
<g
|
||||
id="distribution-switch"
|
||||
transform="translate(136.25973,-67.887849)"
|
||||
style="display:inline"
|
||||
inkscape:label="distribution-switch">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle6199"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g6215"
|
||||
transform="translate(-29.678837,-5.8881735)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path6205"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,0.26458333,0.26458333,0,-52.821766,59.783164)"
|
||||
inkscape:transform-center-x="1.6998618e-06"
|
||||
inkscape:transform-center-y="-0.85152379"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path6207"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,-0.26458333,-0.26458333,0,160.57654,168.47443)"
|
||||
inkscape:transform-center-x="-3.173315e-06"
|
||||
inkscape:transform-center-y="0.85152188"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<g
|
||||
id="g6222"
|
||||
transform="translate(0.10549237,-3.7787718)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#c5e0f1;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path6201"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
|
||||
inkscape:transform-center-x="0.85152345"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path6203"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
|
||||
inkscape:transform-center-x="-0.85152352"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 47.416672,114.30099 h 12.88312"
|
||||
id="path6209" />
|
||||
</g>
|
||||
<g
|
||||
id="g6222-6"
|
||||
style="display:inline"
|
||||
transform="translate(0.10549237,3.8314071)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path6201-2"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
|
||||
inkscape:transform-center-x="0.85152345"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#c5e0f1;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path6203-6"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
|
||||
inkscape:transform-center-x="-0.85152352"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 47.416672,114.30099 h 12.88312"
|
||||
id="path6209-1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 53.877389,107.83714 v 12.85223"
|
||||
id="path6211" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="circle6213"
|
||||
cx="53.877388"
|
||||
cy="114.30098"
|
||||
r="4.3025455" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.9 KiB |
@@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect108851-0-7"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="7"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-22.620006,-322.61998)">
|
||||
<g
|
||||
id="docking-station"
|
||||
transform="translate(287.82013,-4.5667938)"
|
||||
style="display:inline"
|
||||
inkscape:label="docking-station">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle107097-8"
|
||||
cx="-247.46735"
|
||||
cy="344.91956"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g39153"
|
||||
transform="translate(0,0.98568786)">
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -257.37511,337.96442 0.87607,13.06213 a 1.9804625,1.9804625 43.081474 0 0 1.97602,1.84793 h 14.11084 a 1.9786923,1.9786923 136.89296 0 0 1.97437,-1.84804 l 0.87821,-13.27136"
|
||||
id="path108086-4"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:original-d="m -257.37511,337.96442 1.00001,14.91006 h 17.815 l 1.0005,-15.1194"
|
||||
inkscape:path-effect="#path-effect108851-0-7" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect107103-4-7"
|
||||
width="7.5298009"
|
||||
height="4.5139198"
|
||||
x="-251.23225"
|
||||
y="337.29099"
|
||||
rx="0.30000001"
|
||||
ry="0.29999998" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect107103-4-9-2"
|
||||
width="1.7212976"
|
||||
height="2.2977409"
|
||||
x="-248.328"
|
||||
y="334.99326"
|
||||
rx="0.30000001"
|
||||
ry="0.29999998" />
|
||||
<path
|
||||
id="path37804-7"
|
||||
style="display:inline;vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stop-color:#000000"
|
||||
inkscape:transform-center-x="4.6614787e-06"
|
||||
inkscape:transform-center-y="-0.65464484"
|
||||
d="m -247.46736,339.1069 c 0.0828,0 6.67621,3.6315 6.70181,3.7103 0.0256,0.0788 -2.49285,7.82974 -2.55986,7.87845 -0.067,0.0487 -8.21687,0.0487 -8.28389,-2e-5 -0.067,-0.0487 -2.58546,-7.79965 -2.55986,-7.87843 0.0256,-0.0788 6.61896,-3.7103 6.7018,-3.7103 z"
|
||||
sodipodi:nodetypes="ssssss" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-322.62001,-322.61998)">
|
||||
<g
|
||||
id="environment-monitor"
|
||||
style="display:inline"
|
||||
transform="translate(227.33747,-3.8293975)"
|
||||
inkscape:label="environment-monitor">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle158112"
|
||||
cx="113.01532"
|
||||
cy="344.18216"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g163978"
|
||||
transform="matrix(0.38772659,0,0,0.39176299,70.312955,169.9459)"
|
||||
style="stroke-width:2.56582">
|
||||
<path
|
||||
id="path161072"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:12.8291;stop-color:#000000;stop-opacity:1"
|
||||
d="m 1208.627,1520.4863 c -17.2806,0 -31.1934,14.2722 -31.1934,32.002 v 90.4238 c 0,1.059 0.053,2.1047 0.1504,3.1367 a 53.854311,53.854311 0 0 0 -22.8125,43.9746 53.854311,53.854311 0 0 0 53.8555,53.8555 53.854311,53.854311 0 0 0 53.8535,-53.8555 53.854311,53.854311 0 0 0 -22.8125,-43.9746 c 0.097,-1.032 0.1504,-2.0777 0.1504,-3.1367 v -90.4238 c 0,-17.7298 -13.9109,-32.002 -31.1914,-32.002 z"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-217.33747,13.829394)" />
|
||||
<path
|
||||
id="path161891"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#9cc8f8;fill-rule:evenodd;stroke:#9cc8f8;stroke-width:3.39437;stop-color:#000000;stop-opacity:1"
|
||||
d="m 101.86165,441.59087 c -0.73295,0.019 -1.36152,0.69016 -1.33585,1.42213 0.003,3.76598 -0.007,7.53232 0.005,11.29803 0.0233,0.22939 0.0868,0.45249 0.12793,0.67903 -0.807617,0.27474 -1.601949,0.61737 -2.281849,1.14154 -1.67886,1.24291 -2.717006,3.29695 -2.715895,5.38657 -0.02868,2.04026 0.937657,4.05898 2.534603,5.3267 1.574615,1.28643 3.746021,1.78522 5.726531,1.33408 2.13945,-0.45958 3.99384,-2.03192 4.80735,-4.06196 0.83471,-2.01062 0.6095,-4.41711 -0.58327,-6.23816 -0.83556,-1.30871 -2.13802,-2.29886 -3.61127,-2.78223 -0.1305,-0.0662 -0.38878,-0.0611 -0.2694,-0.26683 0.14734,-0.51906 0.0849,-1.05995 0.0974,-1.59165 -0.003,-3.44657 0.005,-6.89343 -0.004,-10.33984 -0.0319,-0.73118 -0.71363,-1.34694 -1.44386,-1.30895 -0.35118,0 -0.70241,-0.003 -1.05357,0.003 z" />
|
||||
<path
|
||||
id="path162198"
|
||||
style="display:inline;vector-effect:none;fill:#9cc8f8;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:3.39439;stop-color:#000000"
|
||||
d="m 133.55266,436.8736 c 0,4.27221 -3.5037,7.73553 -7.82573,7.73553 -4.32204,0 -7.82575,-3.46332 -7.82575,-7.73553 0,-2.13611 2.67833,-5.08325 4.63476,-8.08117 1.95644,-2.99791 3.19099,-6.04661 3.19099,-6.04661 0,0 1.3673,2.9374 3.32373,5.93532 1.95643,2.99792 4.502,6.05635 4.502,8.19246 z"
|
||||
sodipodi:nodetypes="sssscss" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,167 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.46492mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.46492 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-382.62033,-322.61998)">
|
||||
<g
|
||||
id="fire-alarm-control-panel"
|
||||
style="display:inline"
|
||||
transform="translate(227.33747,-3.8293975)"
|
||||
inkscape:label="fire-alarm-control-panel">
|
||||
<ellipse
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle1449"
|
||||
cx="173.01532"
|
||||
cy="344.18216"
|
||||
rx="17.070999"
|
||||
ry="17.071318" />
|
||||
<g
|
||||
id="g15356"
|
||||
transform="matrix(0.49091543,0,0,0.48990893,93.774879,143.01642)"
|
||||
style="stroke-width:2.0391">
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path14112"
|
||||
cx="167.2079"
|
||||
cy="432.0451"
|
||||
r="1.9124098" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect14238"
|
||||
width="27.194416"
|
||||
height="36.502495"
|
||||
x="140.09747"
|
||||
y="391.06808"
|
||||
rx="0.61110324"
|
||||
ry="0.61235875" />
|
||||
<path
|
||||
id="path9959"
|
||||
style="opacity:1;vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stop-color:#000000;stop-opacity:1"
|
||||
d="m 167.2082,405.51415 c -5.57982,0.003 -10.22708,4.71741 -10.45962,8.7485 0,0 0,0 -0.23254,12.69217 -0.0307,1.67507 -2.14526,4.43526 -2.14526,4.43526 h 25.67423 c 0,0 -2.11427,-2.76027 -2.1448,-4.43526 -0.23113,-12.68402 -0.23113,-12.68402 -0.23113,-12.68402 -0.23112,-4.04001 -4.87948,-8.75607 -10.46002,-8.75663 z"
|
||||
sodipodi:nodetypes="ccsccsccc" />
|
||||
<g
|
||||
id="g14457"
|
||||
transform="rotate(-60,184.81905,406.29514)"
|
||||
style="stroke-width:2.0391">
|
||||
<path
|
||||
id="path168565-3"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 186.44982,396.6327 a 11.631045,11.626711 89.99885 0 1 -1.06195,8.83799 11.631045,11.626711 89.99885 0 1 -6.99822,5.4986" />
|
||||
<path
|
||||
id="path168567-6"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 182.46691,397.74844 a 7.4933726,7.49058 89.99885 0 1 -0.68416,5.69399 7.4933726,7.49058 89.99885 0 1 -4.50864,3.54251" />
|
||||
</g>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 145.49468,396.53567 h 16.40001"
|
||||
id="path14492" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 145.49468,400.58073 h 16.40001"
|
||||
id="path14492-7" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect14841"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="145.49467"
|
||||
y="405.26038"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect14841-5"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="152.83168"
|
||||
y="405.26038"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect14841-3"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="160.16869"
|
||||
y="405.26038"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect14841-5-3"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="145.49467"
|
||||
y="412.19992"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect14841-3-6"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="152.83168"
|
||||
y="412.19992"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect14841-5-6"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="145.49467"
|
||||
y="419.13943"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect14841-3-2"
|
||||
width="1.7260052"
|
||||
height="1.7260052"
|
||||
x="152.83168"
|
||||
y="419.13943"
|
||||
rx="0.61110419"
|
||||
ry="0.61235964" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-22.620003,-82.619993)">
|
||||
<g
|
||||
id="firewall"
|
||||
style="display:inline"
|
||||
transform="translate(60.59722,-354.60885)"
|
||||
inkscape:label="firewall">
|
||||
<g
|
||||
id="g15605-2-3"
|
||||
transform="translate(-126.55536,395.20866)"
|
||||
style="display:inline">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle15595-3-7"
|
||||
cx="106.31092"
|
||||
cy="59.75296"
|
||||
r="17.071318" />
|
||||
</g>
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect15597-5-4"
|
||||
width="13.135721"
|
||||
height="7.8575616"
|
||||
x="-31.615744"
|
||||
y="448.41177"
|
||||
ry="0.29990518"
|
||||
rx="0.29990515" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32291;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect15599-9-5"
|
||||
width="8.0613489"
|
||||
height="7.8575616"
|
||||
x="-18.480019"
|
||||
y="448.41177"
|
||||
ry="0.29990518"
|
||||
rx="0.29990521" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect15601-2-2"
|
||||
width="8.1029577"
|
||||
height="7.8575616"
|
||||
x="-30.415871"
|
||||
y="456.26932"
|
||||
ry="0.29990518"
|
||||
rx="0.29990521" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect15603-2-5"
|
||||
width="13.171134"
|
||||
height="7.8575616"
|
||||
x="-22.312912"
|
||||
y="456.26932"
|
||||
ry="0.29990518"
|
||||
rx="0.29990515" />
|
||||
<g
|
||||
id="g11678-0-1-8-4"
|
||||
transform="matrix(0.83042871,0.00860843,-0.00861735,0.83354649,-38.397176,362.64277)"
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.20188">
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.59009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 13.932088,114.71995 c -1.040858,-2.7249 -1.685872,-5.2348 2.117779,-8.20285 3.826063,-2.98554 5.460915,-7.256745 5.750884,-7.965348 0.661583,-1.616724 2.08784,-3.008197 2.08784,-3.008197 0,0 1.351189,6.510735 1.411254,7.636245 0.120128,2.25101 3.490819,-1.87182 3.490819,-1.87182 0,0 2.450777,4.31864 2.936272,6.71087 0.433182,2.13446 -0.07887,6.53284 -0.07887,6.53284 z"
|
||||
id="path1014-9-9-9-7"
|
||||
sodipodi:nodetypes="csscscscc" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#9cc8f8;fill-opacity:1;stroke:#1685fc;stroke-width:1.59009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 18.076691,114.65527 c 0,0 -0.484877,-1.84178 0.168533,-3.54456 0.569041,-1.48292 3.891012,-4.07272 3.891012,-4.07272 0,0 0.544111,2.90123 1.285102,4.14274 0.815246,1.36593 3.340512,3.40798 3.340512,3.40798 z"
|
||||
id="path7258-3-4-7-4"
|
||||
sodipodi:nodetypes="cscscc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-442.62002,-22.619997)">
|
||||
<g
|
||||
id="patch-panel-fc"
|
||||
transform="translate(436.25974,-67.887849)"
|
||||
style="display:inline;image-rendering:auto"
|
||||
inkscape:export-filename="patch-panel-fc.svg"
|
||||
inkscape:export-xdpi="89.523453"
|
||||
inkscape:export-ydpi="89.523453"
|
||||
inkscape:label="fo-patch-panel">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle843"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g3322"
|
||||
transform="translate(-1.2254715e-4)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect845"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="14.755642"
|
||||
y="99.068886"
|
||||
ry="3.4588811"
|
||||
rx="3.4588811" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect847"
|
||||
width="6.9180002"
|
||||
height="6.9177623"
|
||||
x="26.512722"
|
||||
y="99.068886"
|
||||
ry="3.4588811"
|
||||
rx="3.4588811" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect849"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="14.755642"
|
||||
y="110.4946"
|
||||
ry="3.4588811"
|
||||
rx="3.4588811" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect851"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="26.512722"
|
||||
y="110.4946"
|
||||
ry="3.4588811"
|
||||
rx="3.4588811" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,125 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.46492mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.46492 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect21916-5"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="true"
|
||||
hide_knots="true"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect21819-4"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="true"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-442.62033,-142.61999)">
|
||||
<g
|
||||
id="intrusion-alarm-system"
|
||||
transform="translate(167.46714,-0.9814871)"
|
||||
style="display:inline"
|
||||
inkscape:label="intrusion-alarm-system">
|
||||
<ellipse
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="ellipse8007-6"
|
||||
cx="292.88565"
|
||||
cy="161.33426"
|
||||
rx="17.070999"
|
||||
ry="17.071318" />
|
||||
<g
|
||||
id="g25612">
|
||||
<g
|
||||
id="g8019-2"
|
||||
transform="matrix(0.24545772,-0.42427358,0.42514523,0.24495447,85.890791,132.44208)"
|
||||
style="stroke-width:2.0391">
|
||||
<path
|
||||
id="path8015-0"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 186.44982,396.6327 a 11.631045,11.626711 89.99885 0 1 -1.06195,8.83799 11.631045,11.626711 89.99885 0 1 -6.99822,5.4986" />
|
||||
<path
|
||||
id="path8017-2"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 182.46691,397.74844 a 7.4933726,7.49058 89.99885 0 1 -0.68416,5.69399 7.4933726,7.49058 89.99885 0 1 -4.50864,3.54251" />
|
||||
</g>
|
||||
<path
|
||||
id="rect15798"
|
||||
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stop-color:#000000"
|
||||
d="m 288.87703,152.3074 v 2.82786 l 3.34193,-3.72839 a 0.8962662,0.8962662 0.0025884 0 1 1.33485,7e-5 l 7.28796,8.13219 a 2.6142078,2.6142078 69.066895 0 1 0.66739,1.74471 v 10.09382 c 0,0.1662 -0.13404,0.29972 -0.30025,0.29972 h -16.64705 c -0.16619,0 -0.29972,-0.13352 -0.29972,-0.29972 v -10.09382 a 2.6138579,2.6138579 110.93566 0 1 0.66746,-1.74465 l 1.47175,-1.64194 v -5.58985 z"
|
||||
sodipodi:nodetypes="ccsssscccccc"
|
||||
inkscape:original-d="m 288.87703,152.3074 v 2.82786 l 4.00939,-4.47303 8.62274,9.62161 v 11.09382 c 0,0.1662 -0.13404,0.29972 -0.30025,0.29972 h -16.64705 c -0.16619,0 -0.29972,-0.13352 -0.29972,-0.29972 v -11.09382 l 2.13921,-2.38659 v -5.58985 z"
|
||||
inkscape:path-effect="#path-effect21916-5" />
|
||||
<path
|
||||
id="path18341"
|
||||
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stop-color:#000000"
|
||||
d="m 290.12355,160.32162 c 7e-4,1.02157 0.56518,1.95933 1.46761,2.4381 l -1.63028,5.51242 a 0.19766209,0.19766209 53.237719 0 0 0.18954,0.25372 h 5.47048 a 0.19766379,0.19766379 126.76252 0 0 0.18955,-0.25372 l -1.62978,-5.51087 c 0.90271,-0.47917 1.46706,-1.41764 1.46708,-2.43965 -8.8e-4,-1.49626 -1.19299,-2.71976 -2.7621,-2.71976 -1.56911,0 -2.76122,1.2235 -2.7621,2.71976 z"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:original-d="m 290.12355,160.32162 c 7e-4,1.02157 0.56518,1.95933 1.46761,2.4381 l -1.70532,5.76614 h 5.99964 l -1.70481,-5.76459 c 0.90271,-0.47917 1.46706,-1.41764 1.46708,-2.43965 -8.8e-4,-1.49626 -1.19299,-2.71976 -2.7621,-2.71976 -1.56911,0 -2.76122,1.2235 -2.7621,2.71976 z"
|
||||
inkscape:path-effect="#path-effect21819-4" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-442.62001,-82.619985)">
|
||||
<g
|
||||
id="kvm-over-ip"
|
||||
transform="translate(287.33747,-63.829394)"
|
||||
style="display:inline"
|
||||
inkscape:label="kvm-over-ip">
|
||||
<g
|
||||
id="g149418"
|
||||
transform="translate(148.92226,55.941533)">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle149390"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g149416" />
|
||||
</g>
|
||||
<g
|
||||
id="g152789">
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 34.874886,104.72669 24.09306,108.24063"
|
||||
id="path149394"
|
||||
sodipodi:nodetypes="cc"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 24.09306,96.887266 V 108.24063"
|
||||
id="path149396"
|
||||
sodipodi:nodetypes="cc"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 13.311234,104.72669 10.781826,3.51393"
|
||||
id="path149398"
|
||||
sodipodi:nodetypes="cc"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect149402"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="20.634178"
|
||||
y="104.78175"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle149410"
|
||||
cx="13.311234"
|
||||
cy="104.72669"
|
||||
r="1.4622281"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle149412"
|
||||
cx="24.09306"
|
||||
cy="96.887268"
|
||||
r="1.4622281"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle149414"
|
||||
cx="34.874886"
|
||||
cy="104.72669"
|
||||
r="1.4622281"
|
||||
transform="translate(148.92225,55.941533)" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 163.34037,171.85131 h 19.34991"
|
||||
id="path11152-2" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 173.01532,170.74273 v -3.10168"
|
||||
id="path11156-1" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle11158-0"
|
||||
cx="173.0153"
|
||||
cy="171.85132"
|
||||
r="2.5286407" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
@@ -0,0 +1,128 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-382.62,-82.619997)">
|
||||
<g
|
||||
id="kvm"
|
||||
transform="translate(376.25972,-7.8878491)"
|
||||
style="display:inline"
|
||||
inkscape:label="kvm">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle7756"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g1387">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 24.09306,108.24063 6.663534,9.17052"
|
||||
id="path8541"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 34.874886,104.72669 24.09306,108.24063"
|
||||
id="path8541-6"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 24.09306,96.887266 V 108.24063"
|
||||
id="path8541-6-1"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 13.311234,104.72669 10.781826,3.51393"
|
||||
id="path8541-6-8"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.09306,108.24062 -6.663535,9.17053"
|
||||
id="path8541-6-7"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<g
|
||||
id="g7766"
|
||||
style="fill:#ffffff;fill-opacity:1">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect7758"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="20.634178"
|
||||
y="104.78175"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
</g>
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-9"
|
||||
cx="30.756594"
|
||||
cy="117.41115"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-3"
|
||||
cx="17.429525"
|
||||
cy="117.41115"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-6"
|
||||
cx="13.311234"
|
||||
cy="104.72669"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-0"
|
||||
cx="24.09306"
|
||||
cy="96.887268"
|
||||
r="1.4622281" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path20353-7-5-62"
|
||||
cx="34.874886"
|
||||
cy="104.72669"
|
||||
r="1.4622281" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
@@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-82.620002,-82.619997)">
|
||||
<g
|
||||
id="load-balancer"
|
||||
transform="translate(76.25972,-7.8878491)"
|
||||
style="display:inline"
|
||||
inkscape:label="load-balancer">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle18020"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g18669"
|
||||
transform="translate(0,0.55776946)">
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect18022"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="14.755642"
|
||||
y="99.068886"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect18024"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="26.512722"
|
||||
y="99.068886"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="M 14.418108,108.63255 H 33.76802"
|
||||
id="path18441" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path18578"
|
||||
cx="24.093063"
|
||||
cy="108.63255"
|
||||
r="1.5129391" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path2160-6-2-2-3"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,0.26458333,0.26458333,0,-82.606091,69.496694)"
|
||||
inkscape:transform-center-x="1.6998618e-06"
|
||||
inkscape:transform-center-y="-0.85152379"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect168587-5"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-382.62003,-142.62)">
|
||||
<g
|
||||
id="mobile-phone"
|
||||
transform="translate(407.3375,-3.8293975)"
|
||||
style="display:inline"
|
||||
inkscape:label="mobile-phone">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle168561"
|
||||
cx="-6.9846935"
|
||||
cy="164.18217"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g168575"
|
||||
transform="matrix(1.1817516,0,0,1.1821922,1.2694795,-29.91271)"
|
||||
style="stroke-width:0.846044">
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.11932;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -9.8910108,166.79888 c 0.00317,-0.57469 0.1016442,-2.0164 0.9025055,-3.63156 0.064493,-0.13006 0.1756206,-0.33852 0.2487699,-0.46501 0.8992851,-1.55504 2.0834393,-2.34548 2.577829,-2.6256 0.125963,-0.0714 0.3441979,-0.0819 0.4820601,-0.0335 l 1.456866,0.51192 a 0.22306597,0.22306597 69.226816 0 1 0.120973,0.31891 l -0.651568,1.17097 a 0.18993996,0.18993996 173.41918 0 1 -0.3065618,0.0354 l -0.3382034,-0.37228 c -0.098259,-0.10815 -0.2931113,-0.16653 -0.4301565,-0.11568 -0.4383564,0.16263 -1.3575393,0.6085 -2.0235562,1.65094 -0.078512,0.12289 -0.1937103,0.32995 -0.2568977,0.46168 -0.5411865,1.12826 -0.4482564,2.18465 -0.3642859,2.65463 0.025475,0.14258 0.1738689,0.27704 0.317654,0.30308 l 0.499884,0.0906 a 0.18933523,0.18933523 64.680504 0 1 0.1316977,0.27836 l -0.6936614,1.24662 a 0.20619372,0.20619372 171.16326 0 1 -0.3214155,0.05 l -1.1526798,-1.08371 c -0.1064624,-0.10009 -0.2000598,-0.29958 -0.199253,-0.44567 z"
|
||||
id="path168563"
|
||||
sodipodi:nodetypes="czcccczcccc"
|
||||
inkscape:original-d="m -9.884525,167.06332 c 0,0 -0.152861,-1.93823 1.0162872,-4.12974 1.169148,-2.19151 2.93877,-2.97808 2.93877,-2.97808 l 1.956109,0.68734 -0.908865,1.63337 -0.69403,-0.76394 c 0,0 -1.515701,0.34865 -2.411105,1.95783 -0.895404,1.60917 -0.42857,3.14549 -0.42857,3.14549 l 1.020576,0.18488 -0.950958,1.70902 z"
|
||||
inkscape:path-effect="#path-effect168587-5" />
|
||||
<g
|
||||
id="g168573"
|
||||
transform="rotate(29.353187,-12.969556,162.61463)"
|
||||
style="stroke-width:0.846044">
|
||||
<path
|
||||
id="path168565"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -0.02754,154.09051 a 9.8385399,9.8385399 0 0 1 2.88139,6.95663 9.8385399,9.8385399 0 0 1 -2.88164,6.95691" />
|
||||
<path
|
||||
id="path168567"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -2.50254,156.56525 a 6.33854,6.33854 0 0 1 1.85638,4.48189 6.33854,6.33854 0 0 1 -1.85651,4.48203" />
|
||||
<path
|
||||
id="path168569"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -13.941847,154.09051 a 9.8385399,9.8385399 0 0 0 -2.88139,6.95663 9.8385399,9.8385399 0 0 0 2.88164,6.9569" />
|
||||
<path
|
||||
id="path168571"
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m -11.466847,156.56524 a 6.33854,6.33854 0 0 0 -1.85638,4.4819 6.33854,6.33854 0 0 0 1.85651,4.48202" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-262.61999,-202.61999)">
|
||||
<g
|
||||
id="network-socket"
|
||||
transform="translate(74.49431,50.112763)"
|
||||
style="display:inline"
|
||||
inkscape:label="network-socket">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle1915"
|
||||
cx="205.85846"
|
||||
cy="170.24001"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g2837"
|
||||
transform="matrix(0.76974836,0,0,0.76740612,47.388839,39.34684)"
|
||||
style="stroke-width:1.30111">
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect2745"
|
||||
width="22.035437"
|
||||
height="18.680389"
|
||||
x="194.85426"
|
||||
y="161.22551"
|
||||
rx="0.38961461"
|
||||
ry="0.39080378" />
|
||||
<path
|
||||
id="path1917"
|
||||
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.72136;stop-color:#000000"
|
||||
d="m 198.33761,166.02536 h 4.70693 v -1.49132 c -0.0214,-0.62401 5.95813,-0.7265 5.96737,0 v 1.49132 h 4.39444 c 0.17819,0 0.32164,0.12111 0.32164,0.27154 v 10.53614 c 0,0.15043 -0.14345,0.27154 -0.32164,0.27154 h -15.06874 c -0.17819,0 -0.32164,-0.12111 -0.32164,-0.27154 V 166.2969 c 0,-0.15043 0.14345,-0.27154 0.32164,-0.27154 z"
|
||||
sodipodi:nodetypes="sccccssssssss" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 202.06826,173.54774 v 2.04502"
|
||||
id="path1921-9" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 204.59507,173.54774 v 2.04502"
|
||||
id="path1921-1" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 207.12185,173.54774 v 2.04502"
|
||||
id="path1921-2" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 209.64866,173.54774 v 2.04502"
|
||||
id="path1921-7" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-82.620005,-322.61998)">
|
||||
<g
|
||||
id="notebook"
|
||||
style="display:inline"
|
||||
transform="translate(227.33747,-3.8293975)"
|
||||
inkscape:label="notebook">
|
||||
<circle
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle123367"
|
||||
cx="-126.98469"
|
||||
cy="344.18216"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g126064"
|
||||
transform="translate(0,0.86686945)">
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect123516"
|
||||
width="16.102165"
|
||||
height="11.965014"
|
||||
x="-135.03577"
|
||||
y="335.84027"
|
||||
rx="0.30000046"
|
||||
ry="0.30000046" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect123518"
|
||||
width="21.102962"
|
||||
height="2.9850111"
|
||||
x="-137.53616"
|
||||
y="347.8053"
|
||||
rx="0.30000046"
|
||||
ry="0.30000046" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect16898-5"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-262.50953,-142.28008)">
|
||||
<g
|
||||
id="pabx"
|
||||
transform="translate(256.14925,51.772232)"
|
||||
style="display:inline"
|
||||
inkscape:label="pabx">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle16890"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g18684">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="M 24.183889,108.58054 18.299187,97.908988"
|
||||
id="path17039"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 24.183889,108.58054 7.752897,-7.75289"
|
||||
id="path18327" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 24.168351,108.61697 12.139972,4.64452"
|
||||
id="path18419" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 24.203515,108.58054 -11.263185,2.6793"
|
||||
id="path17041" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 24.183889,108.5705 -0.584631,11.22725"
|
||||
id="path17043"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18578-6"
|
||||
cx="31.936787"
|
||||
cy="100.82765"
|
||||
r="1.5129391" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18578-7"
|
||||
cx="18.299187"
|
||||
cy="97.908989"
|
||||
r="1.5129391" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18578-5"
|
||||
cx="12.94033"
|
||||
cy="111.25984"
|
||||
r="1.5129391" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18578-3"
|
||||
cx="23.599258"
|
||||
cy="119.79775"
|
||||
r="1.5129391" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path18578-56"
|
||||
cx="36.308323"
|
||||
cy="113.26149"
|
||||
r="1.5129391" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path16922"
|
||||
cx="24.183889"
|
||||
cy="108.58054"
|
||||
r="7.1289177" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 21.251327,111.22285 c 0.0032,-0.57469 0.101644,-2.0164 0.902505,-3.63156 0.06449,-0.13006 0.175621,-0.33852 0.24877,-0.46501 0.899259,-1.555 2.083369,-2.34544 2.577785,-2.62559 0.125987,-0.0714 0.344242,-0.082 0.482104,-0.0335 l 1.456867,0.51193 a 0.223067,0.223067 69.226947 0 1 0.120973,0.31891 l -0.651569,1.17097 a 0.18993865,0.18993865 173.41937 0 1 -0.30656,0.0354 l -0.338206,-0.37227 c -0.09826,-0.10816 -0.293009,-0.16656 -0.429939,-0.11577 -0.438239,0.16256 -1.357516,0.60835 -2.023631,1.6508 -0.0786,0.123 -0.193851,0.33017 -0.257039,0.4619 -0.541252,1.12841 -0.448234,2.18491 -0.364256,2.6548 0.02547,0.14249 0.173839,0.27687 0.317624,0.30291 l 0.499884,0.0906 a 0.18933713,0.18933713 64.680776 0 1 0.131698,0.27836 l -0.693662,1.24662 a 0.20619371,0.20619371 171.16327 0 1 -0.321415,0.05 l -1.15268,-1.08371 c -0.106462,-0.10009 -0.20006,-0.29958 -0.199253,-0.44567 z"
|
||||
id="path16892"
|
||||
sodipodi:nodetypes="czcccczcccc"
|
||||
inkscape:original-d="m 21.257813,111.48729 c 0,0 -0.152861,-1.93824 1.016287,-4.12974 1.169148,-2.19151 2.93877,-2.97809 2.93877,-2.97809 l 1.956109,0.68735 -0.908865,1.63337 -0.69403,-0.76395 c 0,0 -1.515701,0.34866 -2.411105,1.95783 -0.895404,1.60918 -0.42857,3.14549 -0.42857,3.14549 l 1.020576,0.18489 -0.950958,1.70902 z"
|
||||
inkscape:path-effect="#path-effect16898-5" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-382.56627,-22.619992)">
|
||||
<g
|
||||
id="patch-panel"
|
||||
transform="translate(376.20599,-67.887854)"
|
||||
style="display:inline"
|
||||
inkscape:label="patch-panel">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path846-2-0"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g3311">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1796-0-6"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="14.755642"
|
||||
y="99.068886"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1796-7-9-2"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="26.512722"
|
||||
y="99.068886"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1796-5-3-6"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="14.755642"
|
||||
y="110.4946"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1796-7-3-6-1"
|
||||
width="6.9177623"
|
||||
height="6.9177623"
|
||||
x="26.512722"
|
||||
y="110.4946"
|
||||
ry="0.29990521"
|
||||
rx="0.29990521" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,186 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect24335-0"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect24335-1-6"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect24335-6-1"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-82.620002,-202.61999)">
|
||||
<g
|
||||
id="pdu"
|
||||
transform="translate(76.25972,112.11214)"
|
||||
style="display:inline"
|
||||
inkscape:label="pdu">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle22642"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g24446">
|
||||
<g
|
||||
id="g24341"
|
||||
transform="translate(2.2022783,-3.6624277)">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
|
||||
id="path22955"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
|
||||
inkscape:path-effect="#path-effect24335-0" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 19.079996,104.59475 v -1.44816"
|
||||
id="path24187" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.551977,104.59475 v -1.44816"
|
||||
id="path24187-2" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 21.815986,102.48599 v -1.44816"
|
||||
id="path24187-9" />
|
||||
</g>
|
||||
<g
|
||||
id="g24341-2"
|
||||
transform="translate(2.2770735,5.4312056)"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
|
||||
id="path22955-7"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
|
||||
inkscape:path-effect="#path-effect24335-1-6" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 19.079996,104.59475 v -1.44816"
|
||||
id="path24187-0" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.551977,104.59475 v -1.44816"
|
||||
id="path24187-2-9" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 21.815986,102.48599 v -1.44816"
|
||||
id="path24187-9-3" />
|
||||
</g>
|
||||
<g
|
||||
id="g24341-0"
|
||||
transform="translate(2.5183965,14.524838)"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
|
||||
id="path22955-6"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
|
||||
inkscape:path-effect="#path-effect24335-6-1" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 19.079996,104.59475 v -1.44816"
|
||||
id="path24187-26" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.551977,104.59475 v -1.44816"
|
||||
id="path24187-2-1" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 21.815986,102.48599 v -1.44816"
|
||||
id="path24187-9-8" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-322.50953,-142.28008)">
|
||||
<g
|
||||
id="phone"
|
||||
transform="translate(41.18722,-3.1780004)"
|
||||
style="display:inline"
|
||||
inkscape:label="phone">
|
||||
<g
|
||||
id="g1288-3"
|
||||
transform="translate(274.96203,54.950231)"
|
||||
style="display:inline">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle10171-0"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
</g>
|
||||
<path
|
||||
id="path24122-6"
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 302.39344,153.21469 c -1.1842,0.28549 -5.74371,1.67315 -8.56123,6.62596 -2.70891,4.76175 -1.93418,9.48519 -1.59525,10.94713 0.10649,0.57254 0.53414,1.20121 0.97255,1.48885 l 1.29554,0.75964 c 1.00147,0.58629 2.3155,0.16508 2.94708,-0.94516 l 0.64236,-1.12913 c 0.63172,-1.11016 0.33409,-2.47619 -0.66715,-3.06286 0,0 -0.84997,-0.5314 -1.29553,-0.75965 -0.12832,-0.066 -0.42349,-0.0336 -0.39584,-0.17518 0.003,-0.011 0.0341,-0.001 0.0341,-0.001 0.93988,-3.27574 2.26817,-6.33757 4.94853,-8.65477 0,0 -0.014,-0.009 -0.0103,-0.0129 0.0929,-0.0948 0.20413,0.16719 0.32092,0.23565 l 1.295,0.75964 c 1.0015,0.58629 2.31603,0.16558 2.94762,-0.94465 l 0.64235,-1.13016 c 0.63172,-1.11016 0.33412,-2.47618 -0.66715,-3.06286 0,0 -0.83444,-0.56602 -1.29656,-0.75861 -0.53983,-0.19948 -1.10651,-0.26833 -1.55702,-0.17987 z"
|
||||
sodipodi:nodetypes="cscccscccccccccccccc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect7489-2"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-202.62,-202.62)">
|
||||
<g
|
||||
id="power-panel"
|
||||
transform="translate(196.25972,112.11215)"
|
||||
style="display:inline"
|
||||
inkscape:label="power-panel">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle2068"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g1414">
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect2094"
|
||||
width="15.32574"
|
||||
height="19.166155"
|
||||
x="16.430189"
|
||||
y="98.657547"
|
||||
rx="0.30000046"
|
||||
ry="0.29990521" />
|
||||
<path
|
||||
style="color:#000000;fill:#1685fc;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 22.076952,100.95276 -1.773928,7.28642 a 0.20789687,0.20789687 51.841439 0 0 0.201996,0.25707 h 3.066085 a 0.221025,0.221025 50.125627 0 1 0.217496,0.26036 l -1.224111,6.76858 a 0.04607116,0.04607116 20.128973 0 0 0.08523,0.0312 l 5.163643,-8.94128 a 0.15273666,0.15273666 60.003345 0 0 -0.132265,-0.22912 h -4.139801 a 0.15100299,0.15100299 60.285734 0 1 -0.130013,-0.22781 l 3.092294,-5.23472 a 0.15100299,0.15100299 60.285734 0 0 -0.130013,-0.22781 h -3.969444 a 0.33672627,0.33672627 141.84144 0 0 -0.32717,0.25707 z"
|
||||
id="path4653"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:original-d="m 22.139539,100.69569 -1.899102,7.80056 h 3.595251 l -1.318285,7.2893 5.428279,-9.39952 h -4.668967 l 3.361434,-5.69034 z"
|
||||
inkscape:path-effect="#path-effect7489-2" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 14.21149,102.65731 h 2.218699"
|
||||
id="path6295" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 14.227575,108.24031 h 2.202614"
|
||||
id="path6295-6" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 14.227575,113.82331 h 2.202614"
|
||||
id="path6295-2" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 31.755929,102.65731 h 2.21899"
|
||||
id="path6295-9" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 31.755929,108.24031 h 2.21899"
|
||||
id="path6295-1" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 31.755929,113.82331 h 2.21899"
|
||||
id="path6295-27" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="display:inline;fill:#1685fc;fill-opacity:1;stroke:#1685fc;stroke-width:11.9506;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path15914-0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.02240769,-0.10760072,-0.10922004,-0.02240223,63.72173,141.13463)"
|
||||
inkscape:transform-center-x="-0.17209272"
|
||||
inkscape:transform-center-y="0.25890207"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect6748-3"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-142.62001,-202.61999)">
|
||||
<g
|
||||
id="power-units"
|
||||
transform="translate(136.25973,112.11214)"
|
||||
style="display:inline"
|
||||
inkscape:label="power-units">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle6706"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g6726"
|
||||
transform="matrix(1.4471257,0,0,1.4672614,-7.4774153,-42.540705)"
|
||||
style="display:inline;stroke-width:0.686267">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
|
||||
id="path6718"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
|
||||
inkscape:path-effect="#path-effect6748-3" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 19.079996,104.59475 v -1.44816"
|
||||
id="path6720" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.551977,104.59475 v -1.44816"
|
||||
id="path6722" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 21.815986,102.48599 v -1.44816"
|
||||
id="path6724" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-202.62,-322.61998)">
|
||||
<g
|
||||
id="printer"
|
||||
style="display:inline"
|
||||
transform="translate(227.33747,-3.8293975)"
|
||||
inkscape:label="printer">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle129423"
|
||||
cx="-6.9846935"
|
||||
cy="344.18216"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g132091"
|
||||
transform="translate(1.156126,-2.0886092)">
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect131999"
|
||||
width="21.57835"
|
||||
height="9.9095459"
|
||||
x="-18.929995"
|
||||
y="341.31516"
|
||||
rx="0.30000046"
|
||||
ry="0.30000046" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect132001"
|
||||
width="11.098689"
|
||||
height="7.5224638"
|
||||
x="-13.690165"
|
||||
y="348.52966"
|
||||
rx="0.30000046"
|
||||
ry="0.30000046" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="rect132003"
|
||||
width="11.099"
|
||||
height="4.8257442"
|
||||
x="-13.69032"
|
||||
y="336.48941"
|
||||
rx="0.30000046"
|
||||
ry="0.30000046" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect8622-6"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.1701912,0,1 @ F,0,0,1,0,1.0582838,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.3202113,0,1 @ F,0,0,1,0,1.2869827,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
radius="1"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false"
|
||||
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.1701912,0,1 @ F,0,0,1,0,1.0582838,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.3202113,0,1 @ F,0,0,1,0,1.2869827,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-262.62,-82.619997)">
|
||||
<g
|
||||
id="provider-networks"
|
||||
transform="translate(256.25972,-7.8878491)"
|
||||
style="display:inline"
|
||||
inkscape:label="provider-networks">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle5949"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g10028">
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 14.418108,115.90978 H 33.76802"
|
||||
id="path5953" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 24.093064,114.8012 v -4.69409"
|
||||
id="path5957" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle5959"
|
||||
cx="24.093063"
|
||||
cy="115.90978"
|
||||
r="2.5286407" />
|
||||
<path
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="m 16.124233,101.66588 4.306528,-0.93182 a 0.66402692,0.66402692 9.5159396 0 1 0.484816,0.0813 l 3.639421,2.20767 a 1.121744,1.121744 77.451828 0 1 0.351866,1.58087 l -0.08243,0.12377 a 1.1256229,1.1256229 166.89666 0 1 -1.501904,0.34959 l -2.752341,-1.59744 a 0.00178664,0.00178664 120.51744 0 0 -0.0018,0.003 l 4.75525,2.84645 a 0.56329859,0.56329859 5.7447264 0 0 0.476557,0.0479 l 7.918524,-2.79086 a 1.4048376,1.4048376 23.806369 0 1 1.760401,0.77666 l 0.02398,0.0566 a 1.2370418,1.2370418 113.16114 0 1 -0.701565,1.63995 l -10.460968,3.95398 a 0.77079343,0.77079343 178.24001 0 1 -0.500265,0.0154 l -7.705946,-2.38324 a 0.35980213,0.35980213 53.51455 0 1 -0.253493,-0.34275 l -0.0145,-5.31654 a 0.32704092,0.32704092 128.81737 0 1 0.257877,-0.32053 z"
|
||||
id="path6127"
|
||||
sodipodi:nodetypes="ccccccccccc"
|
||||
inkscape:original-d="m 15.865634,101.72183 4.823726,-1.04372 4.866145,2.95179 -1.317679,1.97856 -3.896468,-2.26148 5.209288,3.11823 9.413201,-3.31766 1.041537,2.457 -11.91232,4.50256 -8.211488,-2.53958 z"
|
||||
inkscape:path-effect="#path-effect8622-6" />
|
||||
<rect
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="rect9091"
|
||||
width="2.3879888"
|
||||
height="7.0936403"
|
||||
x="13.736244"
|
||||
y="101.08244"
|
||||
rx="0.30000046"
|
||||
ry="0.29990518" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465mm"
|
||||
height="35.465633mm"
|
||||
viewBox="0 0 35.465 35.465634"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-142.62029,-82.619957)">
|
||||
<g
|
||||
id="proxy"
|
||||
transform="translate(136.25973,-7.8878491)"
|
||||
style="display:inline"
|
||||
inkscape:label="proxy">
|
||||
<ellipse
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle1225"
|
||||
cx="24.09306"
|
||||
cy="108.24062"
|
||||
rx="17.070999"
|
||||
ry="17.071318" />
|
||||
<g
|
||||
id="g1859">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1227"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.25556787,0.0684792,-0.0684792,-0.25556787,104.12602,197.11675)"
|
||||
inkscape:transform-center-x="0.52162088"
|
||||
inkscape:transform-center-y="-0.52161841"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1229"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.25556787,0.0684792,0.0684792,-0.25556787,-56.334102,197.08613)"
|
||||
inkscape:transform-center-y="-0.52161841"
|
||||
inkscape:transform-center-x="-0.52161956"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1233"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0,0.26458333,0.26458333,0,-82.711582,53.89499)"
|
||||
inkscape:transform-center-x="-3.173315e-06"
|
||||
inkscape:transform-center-y="0.85152188"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 30.305158,106.5761 -6.212098,1.66452"
|
||||
id="path1235" />
|
||||
<path
|
||||
style="display:inline;fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 17.775471,106.40391 6.212098,1.66452"
|
||||
id="path1235-6" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 24.09306,114.66674 V 101.81451"
|
||||
id="path1237" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;vector-effect:none;fill:#9cc8f8;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="circle1239"
|
||||
cx="-23.987566"
|
||||
cy="-108.06844"
|
||||
r="2.5286407"
|
||||
transform="scale(-1)" />
|
||||
<path
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
d="M 14.418108,115.90978 H 33.76802"
|
||||
id="path942-5" />
|
||||
<circle
|
||||
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
|
||||
id="path16050-3-3"
|
||||
cx="24.093063"
|
||||
cy="115.90978"
|
||||
r="2.5286407" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465557mm"
|
||||
height="35.465557mm"
|
||||
viewBox="0 0 35.465557 35.465557"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-442.62001,-322.61998)">
|
||||
<circle
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="role-unknown"
|
||||
cx="460.35278"
|
||||
cy="340.35275"
|
||||
r="17.071318"
|
||||
inkscape:label="role-unknown"
|
||||
inkscape:export-filename="role-unknown.svg"
|
||||
inkscape:export-xdpi="89.52"
|
||||
inkscape:export-ydpi="89.52" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="35.465637mm"
|
||||
height="35.465637mm"
|
||||
viewBox="0 0 35.465637 35.465637"
|
||||
version="1.1"
|
||||
id="svg20924"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="netbox-topology-views-icons.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview20926"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.4723932"
|
||||
inkscape:cx="1020.3364"
|
||||
inkscape:cy="643.5317"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1133"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs20921" />
|
||||
<g
|
||||
inkscape:label="Icons"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:highlight-color="#1685fc"
|
||||
transform="translate(-262.61996,-22.619956)">
|
||||
<g
|
||||
id="g1153-7"
|
||||
inkscape:label="router"
|
||||
style="display:inline"
|
||||
transform="translate(167.33742,-3.8293975)">
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="circle977-5"
|
||||
cx="113.01536"
|
||||
cy="44.182171"
|
||||
r="17.071318" />
|
||||
<g
|
||||
id="g1145-3">
|
||||
<g
|
||||
id="g1158-5"
|
||||
transform="translate(0,-0.68712819)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path979-6"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,62.296384,-70.236637)"
|
||||
inkscape:transform-center-x="0.85152345"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path981-2"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="170.92444"
|
||||
sodipodi:cy="403.2724"
|
||||
sodipodi:r1="16.610861"
|
||||
sodipodi:r2="8.3054304"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="2.0943951"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
transform="matrix(-0.26458333,0,0,0.26458333,163.73434,-53.423074)"
|
||||
inkscape:transform-center-x="-0.85152352"
|
||||
inkscape:transform-center-y="-1.3442414e-06"
|
||||
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
|
||||
<path
|
||||
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 110.1575,36.497284 c 25.26437,-0.477736 -15.691945,16.149717 0.5946,16.683167 l 5.04786,0.165337"
|
||||
id="path983-9"
|
||||
sodipodi:nodetypes="csc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |